IPlayer.cs

From VideoLAN Wiki
Jump to navigation Jump to search
This page contains example code for .Net Interface to VLC.
This code is licensed under the GNU Lesser General public license
/*****************************************************************************
 * IPlayer.cs: IPlayer, IPlayer2 interface definitions
 *****************************************************************************
 * Copyright (C) 2006 Chris Meadowcroft
 *
 * Authors: Chris Meadowcroft
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/

using System;
using System.Drawing;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace VLanControl
{
	[ComVisible(true)]
	[Guid("B5A4F6A1-B8C8-4f4f-B9CD-396DCDCAC4C3")]
	public struct TrackPosition : IComparable<TrackPosition>
	{
		public int time;
		public double position;

		public TrackPosition(int time, double position)
		{
			this.time = time;
			this.position = position;
		}

		public TrackPosition(TrackPosition other)
		{
			this.time = other.time;
			this.position = other.position;
		}

		#region IComparable<TrackPosition> Members

		public int CompareTo(TrackPosition other)
		{
			return this.time.CompareTo(other.time);
		}

		#endregion
	}

	[ComVisible(true)]
	public enum PlayerState
	{
		None = 0,
		Playing = 1,
		Paused = 2,
	}

	[ComVisible(true)]
	public enum MetaData
	{
		NowPlaying = 0,
	}

	public class MetaDataUpdateEventArgs : EventArgs
	{
		MetaData data;
		String text;

		public MetaDataUpdateEventArgs(MetaData data, String text)
		{
			this.data = data;
			this.text = text;
		}

		public MetaData Data { get { return this.data; } }
		public String Text { get { return this.text; } }
	}

	public delegate void MetaDataEventHandler(object sender, MetaDataUpdateEventArgs args);

	[ComVisible(true)]
	[Guid("2EA6BBFA-8BDE-4023-AEE8-916694614B25")]
	[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
	public interface IPlayer : IDisposable
	{
		bool Visible { get; set; }
		Control Parent { get; set; }
		Rectangle Bounds { get; set; }
		Point Location { get; set; }
		Size Size { get; set; }
		Size VideoSize { get; }
		int Time { get; }
		double Position { get; }
		void MoveToPosition(TrackPosition newTrackPosition);
		int Volume { get; set; }
		int Rate { get; set; }
		void GetRates(out int minRate, out int maxRate, out int normalRate);
		bool IsPlaying { get; }
		bool IsPaused { get; }
		bool IsMute { get; }
		int Length { get; set; }
		PlayerState State { get; }
		double TimeScaling { get; set; }

		void Play();
		void ToggleMute();
		void TogglePause();
		void RotateSubtitles();
		void RotateAudioTrack();
		void RotateDeinterlaceMode();
		void RotateAspectRatio();
		void RotateCropModes();
		bool UseMpegVbrOffset { get; set; }
		void CropTop();
		void UnCropTop();
		void CropBottom();
		void UnCropBottom();
		void CropLeft();
		void UnCropLeft();
		void CropRight();
		void UnCropRight();
		void NextDvdTrack();
		void PreviousDvdTrack();
		void NextDvdChapter();
		void PreviousDvdChapter();
		TrackPosition Shuttle(int offsetSeconds);
		void ClearPlayList();
		int AddToPlayList(String fileName, String title, String[] options);
		void PlayItem(int index);
		void Stop();
	}

	[ComVisible(true)]
	[Guid("5CCB86E4-FFD0-49a0-8805-EE16A79CED50")]
	[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
	public interface IPlayer2 : IPlayer
	{
		String DeinterlaceMode { get; set; }
		String AspectRatio { get; set; }
		String CropMode { get; set; }
		int CroppingLeft { get; set; }
		int CroppingRight { get; set; }
		int CroppingTop { get; set; }
		int CroppingBottom { get; set; }
		int AudioTrack { get; set; }
		int SubTitleTrack { get; set; }
		// in ms
		int AudioDelay { get; set; }
		int SubTitleDelay { get; set; }
		int ChapterCount { get; }
		int Chapter { get; set; }
		int Program { get; set; }

		bool AllowVideoAdjustments { get; set; }	// needs to be on to allow Contrast, Brightness, etc. to be adjusted
		float Contrast { get; set; }	// range from 0 to 2, default 1
		float Brightness { get; set; }	// range from 0 to 2, default 1
		int Hue { get; set; }			// range from 0 to 360, default 0
		float Saturation { get; set; }	// range from 0 to 3, default 1
		float Gamma { get; set; }		// range from .01 to 10, default 1

		void AddAndPlay(String fileName, String options);

		String DeinterlaceModesAsString();
		void DeinterlaceModes(out String[] choices, out String[] choiceText);
		String AspectRatiosAsString();
		void AspectRatios(out String[] choices, out String[] choiceText);
		String CropModesAsString();
		void CropModes(out String[] choices, out String[] choiceText);
		String AudioTracksAsString();
		void AudioTracks(out int[] trackIds, out String[] trackNames);
		String SubTitleTracksAsString();
		void SubTitleTracks(out int[] trackIds, out String[] trackNames);
		String ProgramsAsString();
		void Programs(out int[] trackIds, out String[] trackNames);
		void DisplayMessage(String message);
		String GetConfigVariable(String name, String returnOnError);
		bool SetConfigVariable(String name, String value);
		void PrecomputeCrop(Size videoSize, int cropLeft, int cropRight, int cropTop, int cropBottom);
		bool ComputeCrop();

		event MetaDataEventHandler NowPlaying;
	}
}