switch to new FFME control

This commit is contained in:
Paddy Xu
2017-07-29 22:29:06 +03:00
parent 882078cd60
commit 6c64aa7c3d
12 changed files with 6700 additions and 6692 deletions

View File

@@ -35,7 +35,7 @@ namespace QuickLook.Plugin.ImageViewer
".orf", ".pef", ".ptx", ".pxn", ".r3d", ".raf", ".raw", ".rwl", ".rw2", ".rwz", ".sr2", ".srf", ".srw",
".tif", ".x3f",
// normal
".bmp", ".gif", ".ico", ".icon", ".jpg", ".jpeg", ".png", ".psd", ".svg", ".wdp", ".tiff", ".tga", ".webp"
".bmp", ".ggg", ".ico", ".icon", ".jpg", ".jpeg", ".png", ".psd", ".svg", ".wdp", ".tiff", ".tga", ".webp"
};
private Size _imageSize;
private ImagePanel _ip;
@@ -67,10 +67,15 @@ namespace QuickLook.Plugin.ImageViewer
context.SetPreferredSizeFit(_imageSize, 0.8);
else
context.PreferredSize = new Size(1024, 768);
Directory.SetCurrentDirectory(App.AppPath);
}
public void View(string path, ContextObject context)
{
// set dcraw.exe for Magick.NET
Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
_ip = new ImagePanel();
context.ViewerContent = _ip;
@@ -81,11 +86,12 @@ namespace QuickLook.Plugin.ImageViewer
LoadImage(_ip, path);
context.IsBusy = false;
Directory.SetCurrentDirectory(App.AppPath);
}
public void Cleanup()
{
Directory.SetCurrentDirectory(App.AppPath);
_ip = null;
}

View File

@@ -58,6 +58,24 @@ namespace QuickLook.Plugin.VideoViewer
}
}
public sealed class BooleanToVisibilityVisibleConverter : DependencyObject, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Visible;
var v = (bool) value;
return v ? Visibility.Visible : Visibility.Hidden;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public sealed class BooleanToVisibilityHiddenConverter : DependencyObject, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
@@ -78,8 +96,7 @@ namespace QuickLook.Plugin.VideoViewer
public class TimeSpanToSecondsConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is TimeSpan) return ((TimeSpan) value).TotalSeconds;
if (value is Duration)
@@ -88,15 +105,29 @@ namespace QuickLook.Plugin.VideoViewer
return 0d;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var result = TimeSpan.FromTicks((long) Math.Round(TimeSpan.TicksPerSecond * (double) value, 0));
// Do the conversion from visibility to bool
if (targetType == typeof(TimeSpan)) return result;
if (targetType == typeof(Duration)) return new Duration(result);
return Activator.CreateInstance(targetType);
}
}
public class DurationToTimeSpanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = (Duration) value;
return val.HasTimeSpan ? val.TimeSpan : TimeSpan.Zero;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -18,6 +18,7 @@
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
using System.Windows;
using System.Xml.XPath;
@@ -47,6 +48,7 @@ namespace QuickLook.Plugin.VideoViewer.FFmpeg
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = _probePath;
p.StartInfo.Arguments = $"-v quiet -print_format xml -show_streams -show_format \"{media}\"";
p.StartInfo.StandardOutputEncoding = Encoding.UTF8;
p.Start();
p.WaitForExit();
@@ -67,7 +69,7 @@ namespace QuickLook.Plugin.VideoViewer.FFmpeg
public bool CanDecode()
{
var info = infoNavigator.SelectSingleNode("/ffprobe/streams");
var info = infoNavigator.SelectSingleNode("/ffprobe/format");
return info != null;
}

View File

@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
@@ -26,6 +28,7 @@ namespace QuickLook.Plugin.VideoViewer
{
public class Plugin : IViewer
{
private Size _mediaSize;
private ViewerPanel _vp;
public int Priority => int.MaxValue;
@@ -43,25 +46,28 @@ namespace QuickLook.Plugin.VideoViewer
if (Directory.Exists(path))
return false;
var formats = new[]
var blacklist = new[]
{
".3g2", ".3gp", ".3gp2", ".3gpp", ".amv", ".asf", ".asf", ".avi", ".flv", ".m2ts", ".m4v", ".mkv",
".mov", ".mp4", ".mp4v", ".mpeg", ".mpg", ".ogv", ".qt", ".vob", ".webm", ".wmv"
".txt", ".jpg", ".bmp"
};
if (formats.Contains(Path.GetExtension(path).ToLower()))
return true;
if (blacklist.Contains(Path.GetExtension(path).ToLower()))
return false;
return new FFprobe(path).CanDecode();
}
public void Prepare(string path, ContextObject context)
{
var def = new Size(1024, 768);
var def = new Size(450, 450);
var real = new FFprobe(path).GetViewSize();
_mediaSize = new FFprobe(path).GetViewSize();
context.SetPreferredSizeFit(real == Size.Empty ? def : real, 0.6);
var windowSize = _mediaSize == Size.Empty ? def : _mediaSize;
windowSize.Width = Math.Max(def.Width, windowSize.Width);
windowSize.Height = Math.Max(def.Height, windowSize.Height);
context.SetPreferredSizeFit(windowSize, 0.6);
}
public void View(string path, ContextObject context)
@@ -70,11 +76,16 @@ namespace QuickLook.Plugin.VideoViewer
context.ViewerContent = _vp;
Debug.WriteLine("ViewerContent done");
_vp.LoadAndPlay(path);
Debug.WriteLine("LoadAndPlay done");
_vp.mediaElement.MediaOpened += (sender, e) => context.IsBusy = false;
var info = _mediaSize == Size.Empty ? "Audio" : $"{_mediaSize.Width}×{_mediaSize.Height}";
context.Title =
$"{Path.GetFileName(path)} ({_vp.mediaElement.NaturalVideoWidth}×{_vp.mediaElement.NaturalVideoHeight})";
context.IsBusy = false;
$"{Path.GetFileName(path)} ({info})";
}
public void Cleanup()

View File

@@ -62,6 +62,7 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
@@ -105,8 +106,13 @@
</ItemGroup>
<ItemGroup>
<Content Include="ffme\ffme.dll" />
<Resource Include="Resources\compact-disc.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
<Resource Include="ffme\ffme.xml" />
<Content Include="ffme\ffme.pdb" />
<Content Include="ffme\ffmpeg.dll" />
<Content Include="ffme\ffmpeg.pdb" />
<Content Include="FFmpeg\x64\avcodec-57.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -4,8 +4,8 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ControlButtonStyle" TargetType="Grid">
<Setter Property="Height" Value="50" />
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="35" />
<Setter Property="Width" Value="35" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />

View File

@@ -7,26 +7,45 @@
xmlns:local="clr-namespace:QuickLook.Plugin.VideoViewer"
xmlns:ffmpeg="clr-namespace:Unosquare.FFME;assembly=ffme"
mc:Ignorable="d"
Background="#B2454545"
d:DesignHeight="449.167" d:DesignWidth="767">
x:Name="userControl"
Background="#CC4E4E4E"
d:DesignHeight="450" d:DesignWidth="450">
<Grid>
<Grid.Resources>
<ResourceDictionary>
<local:TimeSpanToSecondsConverter x:Key="TimeSpanToSecondsConverter" />
<local:BooleanToVisibilityVisibleConverter x:Key="BooleanToVisibilityVisibleConverter" />
<local:BooleanToVisibilityHiddenConverter x:Key="BooleanToVisibilityHiddenConverter" />
<local:DurationToTimeSpanConverter x:Key="DurationToTimeSpanConverter" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="7*" />
<RowDefinition Height="3*" />
</Grid.RowDefinitions>
<ffmpeg:MediaElement Grid.RowSpan="255" x:Name="mediaElement" />
<ffmpeg:MediaElement x:Name="mediaElement" />
<Grid Grid.Row="1">
<Image Margin="50" Source="Resources/compact-disc.png">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsOpen, ElementName=mediaElement}" Value="True" />
<Condition Binding="{Binding HasVideo, ElementName=mediaElement}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="100"
Visibility="{Binding NaturalDuration.HasTimeSpan, ElementName=mediaElement, Converter={StaticResource BooleanToVisibilityVisibleConverter}}">
<Grid.Background>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Offset="0.0" Color="#00000000" />
@@ -42,22 +61,30 @@
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}"
Value="True" />
<Condition Binding="{Binding IsOpen, ElementName=mediaElement}" Value="True" />
<Condition Binding="{Binding HasVideo, ElementName=mediaElement}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.2" />
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
</MultiDataTrigger.EnterActions>
<MultiDataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.2" />
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0"
Duration="0:0:0.2" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</MultiDataTrigger.ExitActions>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
@@ -72,13 +99,13 @@
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="149" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center"
Orientation="Horizontal" Margin="20,0,0,0">
<StackPanel Grid.Column="0" VerticalAlignment="Center"
Orientation="Horizontal" Margin="10,0,0,0">
<Grid x:Name="buttonMute" Style="{StaticResource ControlButtonStyle}">
<fa:ImageAwesome Height="30" Width="30" Foreground="#FFEFEFEF">
<fa:ImageAwesome Height="23" Width="23" Foreground="#FFEFEFEF">
<fa:ImageAwesome.Style>
<Style TargetType="fa:ImageAwesome">
<Setter Property="Icon" Value="VolumeOff" />
@@ -92,17 +119,18 @@
</fa:ImageAwesome.Style>
</fa:ImageAwesome>
</Grid>
<Slider Style="{StaticResource CustomSliderStyle}" Width="80" Maximum="1"
<Slider Style="{StaticResource CustomSliderStyle}" MaxWidth="75" Maximum="1"
Value="{Binding Volume, ElementName=mediaElement}"
Visibility="{Binding IsMuted, ElementName=mediaElement, Converter={StaticResource BooleanToVisibilityHiddenConverter}}" />
Visibility="{Binding IsMuted, ElementName=mediaElement, Converter={StaticResource BooleanToVisibilityHiddenConverter}}"
BorderThickness="0,0,5,0" />
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center">
<Grid x:Name="buttonBackward" Style="{StaticResource ControlButtonStyle}">
<fa:ImageAwesome Icon="Backward" Height="27" Width="27" Foreground="#FFEFEFEF" />
<fa:ImageAwesome Icon="Backward" Height="23" Width="23" Foreground="#FFEFEFEF" />
</Grid>
<Grid Width="7" />
<Grid Width="3" />
<Grid x:Name="buttonPlayPause" Style="{StaticResource ControlButtonStyle}">
<fa:ImageAwesome Height="30" Width="30" Foreground="#FFEFEFEF">
<fa:ImageAwesome Height="23" Width="23" Foreground="#FFEFEFEF">
<fa:ImageAwesome.Style>
<Style>
<Setter Property="fa:ImageAwesome.Icon" Value="Pause" />
@@ -116,22 +144,22 @@
</fa:ImageAwesome.Style>
</fa:ImageAwesome>
</Grid>
<Grid Width="7" />
<Grid Width="3" />
<Grid x:Name="buttonStop" Style="{StaticResource ControlButtonStyle}">
<fa:ImageAwesome Icon="Stop" Height="27" Width="27" Foreground="#FFEFEFEF" />
<fa:ImageAwesome Icon="Stop" Height="21" Width="21" Foreground="#FFEFEFEF" />
</Grid>
<Grid Width="7" />
<Grid Width="3" />
<Grid x:Name="buttonForward" Style="{StaticResource ControlButtonStyle}">
<fa:ImageAwesome Icon="Forward" Height="27" Width="27" Foreground="#FFEFEFEF" />
<fa:ImageAwesome Icon="Forward" Height="23" Width="23" Foreground="#FFEFEFEF" />
</Grid>
</StackPanel>
<StackPanel Grid.Column="2" HorizontalAlignment="Right" VerticalAlignment="Center"
Orientation="Horizontal" Margin="0,0,20,0">
<TextBlock FontSize="16" Foreground="#FFEFEFEF"
Orientation="Horizontal" Margin="0,0,10,0">
<TextBlock FontSize="14" Foreground="#FFEFEFEF"
Text="{Binding Position, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement}" />
<TextBlock FontSize="16" Text=" / " Foreground="#FFEFEFEF" />
<TextBlock FontSize="16" Foreground="#FFEFEFEF"
Text="{Binding NaturalDuration.TimeSpan, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement}" />
<TextBlock FontSize="14" Text=" / " Foreground="#FFEFEFEF" />
<TextBlock FontSize="14" Foreground="#FFEFEFEF"
Text="{Binding NaturalDuration, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement, Converter={StaticResource DurationToTimeSpanConverter}}" />
</StackPanel>
</Grid>
</Grid>

View File

@@ -30,6 +30,8 @@ namespace QuickLook.Plugin.VideoViewer
{
private readonly ContextObject _context;
private bool _wasPlaying;
public ViewerPanel(ContextObject context)
{
InitializeComponent();
@@ -47,7 +49,25 @@ namespace QuickLook.Plugin.VideoViewer
buttonBackward.MouseLeftButtonUp += (sender, e) => SeekBackward();
buttonForward.MouseLeftButtonUp += (sender, e) => SeekForward();
sliderProgress.PreviewMouseDown += (sender, e) =>
{
_wasPlaying = mediaElement.IsPlaying;
mediaElement.Pause();
};
sliderProgress.PreviewMouseUp += (sender, e) =>
{
if (_wasPlaying) mediaElement.Play();
};
mediaElement.MediaFailed += ShowErrorNotification;
mediaElement.MediaEnded += (s, e) =>
{
if (!mediaElement.NaturalDuration.HasTimeSpan)
{
mediaElement.Stop();
mediaElement.Play();
}
};
}
public void Dispose()
@@ -55,23 +75,39 @@ namespace QuickLook.Plugin.VideoViewer
mediaElement?.Stop();
mediaElement?.Dispose();
mediaElement = null;
Debug.WriteLine("dispose done");
}
private void ResumePlaying()
{
_wasPlaying = mediaElement.IsPlaying;
}
private void SeekBackward()
{
_wasPlaying = mediaElement.IsPlaying;
mediaElement.Pause();
var pos = mediaElement.Position;
var delta = TimeSpan.FromSeconds(15);
mediaElement.Position = pos < pos - delta ? TimeSpan.Zero : pos - delta;
if (_wasPlaying) mediaElement.Play();
}
private void SeekForward()
{
_wasPlaying = mediaElement.IsPlaying;
mediaElement.Pause();
var pos = mediaElement.Position;
var len = mediaElement.NaturalDuration.TimeSpan;
var delta = TimeSpan.FromSeconds(15);
mediaElement.Position = pos + delta > len ? len : pos + delta;
if (_wasPlaying) mediaElement.Play();
}
private void TogglePlayPause(object sender, MouseButtonEventArgs e)
@@ -86,12 +122,12 @@ namespace QuickLook.Plugin.VideoViewer
private void ShowErrorNotification(object sender, ExceptionRoutedEventArgs exceptionRoutedEventArgs)
{
_context.ShowNotification("", "An error occurred while loading the video.");
mediaElement.Stop();
mediaElement?.Close();
Dispose();
throw new Exception("fallback to default viewer.");
//throw new Exception("fallback to default viewer.");
}
public void LoadAndPlay(string path)

View File

@@ -1,5 +1,4 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>ffme</name>
@@ -92,8 +91,7 @@
Represents a command to be executed against an intance of the MediaElement
</summary>
</member>
<member
name="M:Unosquare.FFME.Commands.MediaCommand.#ctor(Unosquare.FFME.Commands.MediaCommandManager,Unosquare.FFME.Commands.MediaCommandType)">
<member name="M:Unosquare.FFME.Commands.MediaCommand.#ctor(Unosquare.FFME.Commands.MediaCommandManager,Unosquare.FFME.Commands.MediaCommandType)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Commands.MediaCommand" /> class.
</summary>
@@ -203,8 +201,7 @@
</summary>
<returns>The awaitable task</returns>
</member>
<member
name="M:Unosquare.FFME.Commands.MediaCommandManager.PendingCountOf(Unosquare.FFME.Commands.MediaCommandType)">
<member name="M:Unosquare.FFME.Commands.MediaCommandManager.PendingCountOf(Unosquare.FFME.Commands.MediaCommandType)">
<summary>
Gets the pending count of the given command type.
</summary>
@@ -257,8 +254,7 @@
</summary>
<seealso cref="T:Unosquare.FFME.Commands.MediaCommand" />
</member>
<member
name="M:Unosquare.FFME.Commands.SeekCommand.#ctor(Unosquare.FFME.Commands.MediaCommandManager,System.TimeSpan)">
<member name="M:Unosquare.FFME.Commands.SeekCommand.#ctor(Unosquare.FFME.Commands.MediaCommandManager,System.TimeSpan)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Commands.SeekCommand" /> class.
</summary>
@@ -284,8 +280,7 @@
</summary>
<seealso cref="T:Unosquare.FFME.Commands.MediaCommand" />
</member>
<member
name="M:Unosquare.FFME.Commands.SpeedRatioCommand.#ctor(Unosquare.FFME.Commands.MediaCommandManager,System.Double)">
<member name="M:Unosquare.FFME.Commands.SpeedRatioCommand.#ctor(Unosquare.FFME.Commands.MediaCommandManager,System.Double)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Commands.SpeedRatioCommand"/> class.
</summary>
@@ -527,60 +522,6 @@
<param name="source">The source.</param>
<param name="length">The length.</param>
</member>
<member name="T:Unosquare.FFME.Core.ThreadTiming">
<summary>
Provides thread timing function alternatives to the
blocking Thread.Sleep or the overhead-incurring await Task.Delay
</summary>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.#ctor">
<summary>
Prevents a default instance of the <see cref="T:Unosquare.FFME.Core.ThreadTiming" /> class from being created.
</summary>
</member>
<member name="P:Unosquare.FFME.Core.ThreadTiming.Instance">
<summary>
Gets the singleton, lazy-loaded instance.
</summary>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.Suspend(System.Int32)">
<summary>
Suspends the thread for at most the specified timeout.
</summary>
<param name="timeoutMilliseconds">The timeout milliseconds.</param>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.SuspendOne">
<summary>
Suspends the thread for at most 1 timer cycle.
</summary>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.Sleep(System.Int32)">
<summary>
Alternative thread sleep method by suspending the thread by at least
the sepcifed timeout milliseconds.
</summary>
<param name="timeoutMilliseconds">The timeout milliseconds.</param>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.SleepBlock(System.Int32)">
<summary>
Calls the classic Thread.Sleep method directly.
</summary>
<param name="timeoutMilliseconds">The timeout milliseconds.</param>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.SuspendAsync(System.Int32)">
<summary>
Calls the classic Task.Delay method directly.
</summary>
<param name="timeoutMilliseconds">The timeout milliseconds.</param>
<returns>The awaitable task</returns>
</member>
<member name="M:Unosquare.FFME.Core.ThreadTiming.PromiseDelay(System.Double)">
<summary>
Promises the delay.
</summary>
<param name="timeoutMilliseconds">The timeout milliseconds.</param>
<returns>The awaitable task</returns>
</member>
<member name="T:Unosquare.FFME.Core.CircularBuffer">
<summary>
A fixed-size buffer that acts as an infinite length one.
@@ -678,8 +619,7 @@
<param name="targetOffset">The target offset.</param>
<exception cref="T:System.InvalidOperationException">When requested GT readble</exception>
</member>
<member
name="M:Unosquare.FFME.Core.CircularBuffer.Write(System.IntPtr,System.Int32,System.TimeSpan,System.Boolean)">
<member name="M:Unosquare.FFME.Core.CircularBuffer.Write(System.IntPtr,System.Int32,System.TimeSpan,System.Boolean)">
<summary>
Writes data to the backing buffer using the specified pointer and length.
and associating a write tag for this operation.
@@ -827,8 +767,7 @@
<param name="frame">The frame.</param>
<returns>The audio parameters</returns>
</member>
<member
name="M:Unosquare.FFME.Core.AudioParams.AreCompatible(Unosquare.FFME.Core.AudioParams,Unosquare.FFME.Core.AudioParams)">
<member name="M:Unosquare.FFME.Core.AudioParams.AreCompatible(Unosquare.FFME.Core.AudioParams,Unosquare.FFME.Core.AudioParams)">
<summary>
Determines if the audio specs are compatible between them.
They must share format, channel count, layout and sample rate
@@ -842,8 +781,7 @@
A single codec option along with a stream specifier.
</summary>
</member>
<member
name="M:Unosquare.FFME.Core.CodecOption.#ctor(Unosquare.FFME.Core.StreamSpecifier,System.String,System.String)">
<member name="M:Unosquare.FFME.Core.CodecOption.#ctor(Unosquare.FFME.Core.StreamSpecifier,System.String,System.String)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Core.CodecOption"/> class.
</summary>
@@ -927,8 +865,7 @@
Initializes a new instance of the <see cref="T:Unosquare.FFME.Core.FFDictionary"/> class.
</summary>
</member>
<member
name="M:Unosquare.FFME.Core.FFDictionary.#ctor(System.Collections.Generic.Dictionary{System.String,System.String})">
<member name="M:Unosquare.FFME.Core.FFDictionary.#ctor(System.Collections.Generic.Dictionary{System.String,System.String})">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Core.FFDictionary"/> class.
</summary>
@@ -959,8 +896,7 @@
<param name="dictionary">The dictionary to convert from.</param>
<returns>the converterd dictionary</returns>
</member>
<member
name="M:Unosquare.FFME.Core.FFDictionary.GetEntry(FFmpeg.AutoGen.AVDictionary*,System.String,System.Boolean)">
<member name="M:Unosquare.FFME.Core.FFDictionary.GetEntry(FFmpeg.AutoGen.AVDictionary*,System.String,System.Boolean)">
<summary>
A wrapper for the av_dict_get method
</summary>
@@ -969,8 +905,7 @@
<param name="matchCase">if set to <c>true</c> [match case].</param>
<returns>The Entry</returns>
</member>
<member
name="M:Unosquare.FFME.Core.FFDictionary.Fill(System.Collections.Generic.Dictionary{System.String,System.String})">
<member name="M:Unosquare.FFME.Core.FFDictionary.Fill(System.Collections.Generic.Dictionary{System.String,System.String})">
<summary>
Fills this dictionary with a set of options
</summary>
@@ -1212,20 +1147,6 @@
<param name="rational">The rational.</param>
<returns>The value</returns>
</member>
<member name="M:Unosquare.FFME.Core.Utils.RoundTicks(System.Int64)">
<summary>
Rounds the ticks.
</summary>
<param name="ticks">The ticks.</param>
<returns>The ticks</returns>
</member>
<member name="M:Unosquare.FFME.Core.Utils.RoundSeconds(System.Decimal)">
<summary>
Rounds the seconds to 4 decimals.
</summary>
<param name="seconds">The seconds.</param>
<returns>The seconds</returns>
</member>
<member name="M:Unosquare.FFME.Core.Utils.RegisterFFmpeg(System.String)">
<summary>
Registers FFmpeg library and initializes its components.
@@ -1236,8 +1157,27 @@
<returns>Returns the path that FFmpeg was registered from.</returns>
<exception cref="T:System.IO.FileNotFoundException">When the folder is not found</exception>
</member>
<member
name="M:Unosquare.FFME.Core.Utils.InvokeAsync(System.Windows.Threading.Dispatcher,System.Windows.Threading.DispatcherPriority,System.Delegate,System.Object[])">
<member name="M:Unosquare.FFME.Core.Utils.PromiseDelay(System.Double)">
<summary>
Promises the delay.
</summary>
<param name="timeoutMilliseconds">The timeout milliseconds.</param>
<returns>
The awaitable task
</returns>
</member>
<member name="M:Unosquare.FFME.Core.Utils.PumpInvokeAsync(System.Windows.Threading.Dispatcher,System.Delegate,System.Object[])">
<summary>
Invoke the given action asynchronously by starting a new background thread and continuing
dispatcher processing. This method is somewhat expensive but it guarantees
pending operations on the selected dispatcher do not cause a deadlock.
</summary>
<param name="dispatcher">The dispatcher.</param>
<param name="action">The action.</param>
<param name="args">The arguments.</param>
<returns>The awaitable promise.</returns>
</member>
<member name="M:Unosquare.FFME.Core.Utils.InvokeAsync(System.Windows.Threading.Dispatcher,System.Windows.Threading.DispatcherPriority,System.Delegate,System.Object[])">
<summary>
Invokes the specified delegate on the specified dispatcher.
</summary>
@@ -1254,8 +1194,7 @@
<param name="priority">The priority. Set it to Normal by default.</param>
<param name="action">The action.</param>
</member>
<member
name="M:Unosquare.FFME.Core.Utils.UIEnqueueInvoke(System.Windows.Threading.DispatcherPriority,System.Delegate,System.Object[])">
<member name="M:Unosquare.FFME.Core.Utils.UIEnqueueInvoke(System.Windows.Threading.DispatcherPriority,System.Delegate,System.Object[])">
<summary>
Enqueues the given instructions with the given arguments on the main application dispatcher.
This is a way to execute code in a fire-and-forget style
@@ -1273,8 +1212,7 @@
<param name="message">The message.</param>
<exception cref="T:System.ArgumentNullException">sender</exception>
</member>
<member
name="M:Unosquare.FFME.Core.Utils.LogRenderBlock(Unosquare.FFME.MediaElement,Unosquare.FFME.Decoding.MediaBlock,System.TimeSpan,System.Int32)">
<member name="M:Unosquare.FFME.Core.Utils.LogRenderBlock(Unosquare.FFME.MediaElement,Unosquare.FFME.Decoding.MediaBlock,System.TimeSpan,System.Int32)">
<summary>
Logs a block rendering operation as a Trace Message
if the debugger is attached.
@@ -1884,8 +1822,7 @@
The CC4 Track Packets
</summary>
</member>
<member
name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionCollection.Add(Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket)">
<member name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionCollection.Add(Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket)">
<summary>
Adds the specified packet and automatically places it on the right track.
If the track requires sorting it does so by reordering packets based on their timestamp.
@@ -1903,21 +1840,17 @@
Holds the data bytes
</summary>
</member>
<member
name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.#ctor(System.TimeSpan,System.Byte[],System.Int32)">
<member name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.#ctor(System.TimeSpan,System.Byte[],System.Int32)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket" />
class.
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket"/> class.
</summary>
<param name="timestamp">The timestamp.</param>
<param name="source">The source.</param>
<param name="offset">The offset.</param>
</member>
<member
name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.#ctor(System.TimeSpan,System.Byte,System.Byte,System.Byte)">
<member name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.#ctor(System.TimeSpan,System.Byte,System.Byte,System.Byte)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket" />
class.
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket"/> class.
</summary>
<param name="timestamp">The timestamp.</param>
<param name="header">The header.</param>
@@ -2010,9 +1943,7 @@
</summary>
<param name="obj">An object to compare with this instance.</param>
<returns>
A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes
<paramref name="obj" /> in the sort order. Zero This instance occurs in the same position in the sort order as
<paramref name="obj" />. Greater than zero This instance follows <paramref name="obj" /> in the sort order.
A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes <paramref name="obj" /> in the sort order. Zero This instance occurs in the same position in the sort order as <paramref name="obj" />. Greater than zero This instance follows <paramref name="obj" /> in the sort order.
</returns>
</member>
<member name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.HeaderHasMarkers(System.Byte)">
@@ -2039,8 +1970,7 @@
<param name="data">The data.</param>
<returns>The field type</returns>
</member>
<member
name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.IsEmptyChannelData(System.Byte,System.Byte)">
<member name="M:Unosquare.FFME.Decoding.ClosedCaptions.ClosedCaptionPacket.IsEmptyChannelData(System.Byte,System.Byte)">
<summary>
Determines whether the data is null padding
</summary>
@@ -2161,8 +2091,7 @@
<seealso cref="T:Unosquare.FFME.Decoding.MediaFrame" />
<seealso cref="T:System.IDisposable" />
</member>
<member
name="M:Unosquare.FFME.Decoding.AudioFrame.#ctor(FFmpeg.AutoGen.AVFrame*,Unosquare.FFME.Decoding.MediaComponent)">
<member name="M:Unosquare.FFME.Decoding.AudioFrame.#ctor(FFmpeg.AutoGen.AVFrame*,Unosquare.FFME.Decoding.MediaComponent)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.AudioFrame" /> class.
</summary>
@@ -2304,8 +2233,7 @@
<param name="current">The current block.</param>
<returns>The next media block</returns>
</member>
<member
name="M:Unosquare.FFME.Decoding.MediaBlockBuffer.Add(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaContainer)">
<member name="M:Unosquare.FFME.Decoding.MediaBlockBuffer.Add(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaContainer)">
<summary>
Adds a block to the playback blocks by converting the given frame.
If there are no more blocks in the pool, the oldest block is returned to the pool
@@ -2398,8 +2326,7 @@
Gets the bits per sample.
</summary>
</member>
<member
name="M:Unosquare.FFME.Decoding.AudioComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<member name="M:Unosquare.FFME.Decoding.AudioComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<summary>
Converts decoded, raw frame data in the frame source into a a usable frame. <br />
The process includes performing picture, samples or text conversions
@@ -2484,9 +2411,7 @@
</summary>
<param name="other">An object to compare with this instance.</param>
<returns>
A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes
<paramref name="other" /> in the sort order. Zero This instance occurs in the same position in the sort order as
<paramref name="other" />. Greater than zero This instance follows <paramref name="other" /> in the sort order.
A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes <paramref name="other" /> in the sort order. Zero This instance occurs in the same position in the sort order as <paramref name="other" />. Greater than zero This instance follows <paramref name="other" /> in the sort order.
</returns>
</member>
<member name="M:Unosquare.FFME.Decoding.MediaFrame.Dispose">
@@ -2621,9 +2546,7 @@
</summary>
<param name="other">An object to compare with this instance.</param>
<returns>
A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes
<paramref name="other" /> in the sort order. Zero This instance occurs in the same position in the sort order as
<paramref name="other" />. Greater than zero This instance follows <paramref name="other" /> in the sort order.
A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes <paramref name="other" /> in the sort order. Zero This instance occurs in the same position in the sort order as <paramref name="other" />. Greater than zero This instance follows <paramref name="other" /> in the sort order.
</returns>
</member>
<member name="M:Unosquare.FFME.Decoding.MediaBlock.Dispose">
@@ -2778,8 +2701,7 @@
</summary>
<returns>The received Media Frames</returns>
</member>
<member
name="M:Unosquare.FFME.Decoding.MediaComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<member name="M:Unosquare.FFME.Decoding.MediaComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<summary>
Converts decoded, raw frame data in the frame source into a a usable frame. <br />
The process includes performing picture, samples or text conversions
@@ -3029,8 +2951,7 @@
</summary>
<seealso cref="T:Unosquare.FFME.Decoding.MediaFrame" />
</member>
<member
name="M:Unosquare.FFME.Decoding.SubtitleFrame.#ctor(FFmpeg.AutoGen.AVSubtitle*,Unosquare.FFME.Decoding.MediaComponent)">
<member name="M:Unosquare.FFME.Decoding.SubtitleFrame.#ctor(FFmpeg.AutoGen.AVSubtitle*,Unosquare.FFME.Decoding.MediaComponent)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.SubtitleFrame" /> class.
</summary>
@@ -3167,8 +3088,7 @@
</summary>
<seealso cref="T:Unosquare.FFME.Decoding.MediaFrame" />
</member>
<member
name="M:Unosquare.FFME.Decoding.VideoFrame.#ctor(FFmpeg.AutoGen.AVFrame*,Unosquare.FFME.Decoding.MediaComponent)">
<member name="M:Unosquare.FFME.Decoding.VideoFrame.#ctor(FFmpeg.AutoGen.AVFrame*,Unosquare.FFME.Decoding.MediaComponent)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.VideoFrame" /> class.
</summary>
@@ -3278,8 +3198,7 @@
When a read operation is started, this is set to the ticks of UTC now.
</summary>
</member>
<member
name="M:Unosquare.FFME.Decoding.MediaContainer.#ctor(System.String,Unosquare.FFME.Core.IMediaLogger,System.String)">
<member name="M:Unosquare.FFME.Decoding.MediaContainer.#ctor(System.String,Unosquare.FFME.Core.IMediaLogger,System.String)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.MediaContainer" /> class.
</summary>
@@ -3287,8 +3206,7 @@
<param name="logger">The logger.</param>
<param name="protocolPrefix">
The protocol prefix. See https://ffmpeg.org/ffmpeg-protocols.html
Leave null if setting it is not intended.
</param>
Leave null if setting it is not intended.</param>
<exception cref="T:System.ArgumentNullException">mediaUrl</exception>
</member>
<member name="M:Unosquare.FFME.Decoding.MediaContainer.Finalize">
@@ -3468,8 +3386,7 @@
</summary>
<returns>The list of media frames</returns>
</member>
<member
name="M:Unosquare.FFME.Decoding.MediaContainer.Convert(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@,System.Boolean)">
<member name="M:Unosquare.FFME.Decoding.MediaContainer.Convert(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@,System.Boolean)">
<summary>
Performs audio, video and subtitle conversions on the decoded input frame so data
can be used as a Frame. Please note that if the output is passed as a reference.
@@ -3549,8 +3466,7 @@
Resumes the reads of network streams
</summary>
</member>
<member
name="M:Unosquare.FFME.Decoding.MediaContainer.DropSeekFrames(System.Collections.Generic.List{Unosquare.FFME.Decoding.MediaFrame},System.TimeSpan)">
<member name="M:Unosquare.FFME.Decoding.MediaContainer.DropSeekFrames(System.Collections.Generic.List{Unosquare.FFME.Decoding.MediaFrame},System.TimeSpan)">
<summary>
Drops the seek frames that are no longer needed.
Target time should be provided in absolute, 0-based time
@@ -3572,8 +3488,7 @@
<param name="targetTime">The target time.</param>
<returns>The list of media frames</returns>
</member>
<member
name="M:Unosquare.FFME.Decoding.MediaContainer.StreamSeekDecode(System.Collections.Generic.List{Unosquare.FFME.Decoding.MediaFrame},System.TimeSpan,Unosquare.FFME.Decoding.SeekRequirement)">
<member name="M:Unosquare.FFME.Decoding.MediaContainer.StreamSeekDecode(System.Collections.Generic.List{Unosquare.FFME.Decoding.MediaFrame},System.TimeSpan,Unosquare.FFME.Decoding.SeekRequirement)">
<summary>
Reads and decodes packets untill the required media components have frames on or right before the target time.
</summary>
@@ -3587,8 +3502,7 @@
Releases unmanaged and - optionally - managed resources.
</summary>
<param name="alsoManaged">
<c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.
</param>
<c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
</member>
<member name="T:Unosquare.FFME.Decoding.PacketQueue">
<summary>
@@ -3666,16 +3580,14 @@
</summary>
<seealso cref="T:Unosquare.FFME.Decoding.MediaComponent" />
</member>
<member
name="M:Unosquare.FFME.Decoding.SubtitleComponent.#ctor(Unosquare.FFME.Decoding.MediaContainer,System.Int32)">
<member name="M:Unosquare.FFME.Decoding.SubtitleComponent.#ctor(Unosquare.FFME.Decoding.MediaContainer,System.Int32)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Decoding.SubtitleComponent"/> class.
</summary>
<param name="container">The container.</param>
<param name="streamIndex">Index of the stream.</param>
</member>
<member
name="M:Unosquare.FFME.Decoding.SubtitleComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<member name="M:Unosquare.FFME.Decoding.SubtitleComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<summary>
Converts decoded, raw frame data in the frame source into a a usable frame. <br />
The process includes performing picture, samples or text conversions
@@ -3745,8 +3657,7 @@
Gets the height of the picture frame.
</summary>
</member>
<member
name="M:Unosquare.FFME.Decoding.VideoComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<member name="M:Unosquare.FFME.Decoding.VideoComponent.MaterializeFrame(Unosquare.FFME.Decoding.MediaFrame,Unosquare.FFME.Decoding.MediaBlock@)">
<summary>
Converts decoded, raw frame data in the frame source into a a usable frame. <br />
The process includes performing picture, samples or text conversions
@@ -3843,8 +3754,7 @@
Ensure you handle this quickly before you get choppy subtitles.
</summary>
</member>
<member
name="M:Unosquare.FFME.MediaElement.RaiseRenderingVideoEvent(System.Windows.Media.Imaging.WriteableBitmap,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<member name="M:Unosquare.FFME.MediaElement.RaiseRenderingVideoEvent(System.Windows.Media.Imaging.WriteableBitmap,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<summary>
Raises the rendering video event.
</summary>
@@ -3854,16 +3764,14 @@
<param name="duration">The duration.</param>
<param name="clock">The clock.</param>
</member>
<member
name="M:Unosquare.FFME.MediaElement.RaiseRenderingAudioEvent(Unosquare.FFME.Decoding.AudioBlock,System.TimeSpan)">
<member name="M:Unosquare.FFME.MediaElement.RaiseRenderingAudioEvent(Unosquare.FFME.Decoding.AudioBlock,System.TimeSpan)">
<summary>
Raises the rendering audio event.
</summary>
<param name="audioBlock">The audio block.</param>
<param name="clock">The clock.</param>
</member>
<member
name="M:Unosquare.FFME.MediaElement.RaiseRenderingSubtitlesEvent(Unosquare.FFME.Decoding.SubtitleBlock,System.TimeSpan)">
<member name="M:Unosquare.FFME.MediaElement.RaiseRenderingSubtitlesEvent(Unosquare.FFME.Decoding.SubtitleBlock,System.TimeSpan)">
<summary>
Raises the rendering subtitles event.
</summary>
@@ -3926,8 +3834,7 @@
<c>true</c> if this instance [can read more frames of] the specified t; otherwise, <c>false</c>.
</returns>
</member>
<member
name="M:Unosquare.FFME.MediaElement.SendBlockToRenderer(Unosquare.FFME.Decoding.MediaBlock,System.TimeSpan)">
<member name="M:Unosquare.FFME.MediaElement.SendBlockToRenderer(Unosquare.FFME.Decoding.MediaBlock,System.TimeSpan)">
<summary>
Sends the given block to its corresponding media renderer.
</summary>
@@ -3996,6 +3903,11 @@
or if the Position property is being driven from within
</summary>
</member>
<member name="F:Unosquare.FFME.MediaElement.IsDisposed">
<summary>
To detect redundant calls
</summary>
</member>
<member name="F:Unosquare.FFME.MediaElement.m_FFmpegDirectory">
<summary>
The ffmpeg directory
@@ -4095,25 +4007,19 @@
<typeparam name="T">Type of the property.</typeparam>
<param name="storage">Reference to a property with both getter and setter.</param>
<param name="value">Desired value for the property.</param>
<param name="propertyName">
Name of the property used to notify listeners. This
<param name="propertyName">Name of the property used to notify listeners. This
value is optional and can be provided automatically when invoked from compilers that
support CallerMemberName.
</param>
<returns>
True if the value was changed, false if the existing value matched the
desired value.
</returns>
support CallerMemberName.</param>
<returns>True if the value was changed, false if the existing value matched the
desired value.</returns>
</member>
<member name="M:Unosquare.FFME.MediaElement.OnPropertyChanged(System.String)">
<summary>
Notifies listeners that a property value has changed.
</summary>
<param name="propertyName">
Name of the property used to notify listeners. This
<param name="propertyName">Name of the property used to notify listeners. This
value is optional and can be provided automatically when invoked from compilers
that support <see cref="T:System.Runtime.CompilerServices.CallerMemberNameAttribute" />.
</param>
that support <see cref="T:System.Runtime.CompilerServices.CallerMemberNameAttribute"/>.</param>
</member>
<member name="M:Unosquare.FFME.MediaElement.Dispose(System.Boolean)">
<summary>
@@ -4541,8 +4447,7 @@
Raises the media opening event.
</summary>
</member>
<member
name="M:Unosquare.FFME.MediaElement.CreateExceptionRoutedEventArgs(System.Windows.RoutedEvent,System.Object,System.Exception)">
<member name="M:Unosquare.FFME.MediaElement.CreateExceptionRoutedEventArgs(System.Windows.RoutedEvent,System.Object,System.Exception)">
<summary>
Creates a new instance of exception routed event arguments.
This method exists because the constructor has not been made public for that class.
@@ -4596,8 +4501,7 @@
</summary>
<seealso cref="T:System.EventArgs" />
</member>
<member
name="M:Unosquare.FFME.RenderingEventArgs.#ctor(Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<member name="M:Unosquare.FFME.RenderingEventArgs.#ctor(Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.RenderingEventArgs" /> class.
</summary>
@@ -4634,8 +4538,7 @@
</summary>
<seealso cref="T:System.EventArgs" />
</member>
<member
name="M:Unosquare.FFME.RenderingAudioEventArgs.#ctor(System.IntPtr,System.Int32,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<member name="M:Unosquare.FFME.RenderingAudioEventArgs.#ctor(System.IntPtr,System.Int32,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.RenderingAudioEventArgs" /> class.
</summary>
@@ -4688,8 +4591,7 @@
</summary>
<seealso cref="T:System.EventArgs" />
</member>
<member
name="M:Unosquare.FFME.RenderingSubtitlesEventArgs.#ctor(System.Collections.Generic.List{System.String},System.Collections.Generic.List{System.String},FFmpeg.AutoGen.AVSubtitleType,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<member name="M:Unosquare.FFME.RenderingSubtitlesEventArgs.#ctor(System.Collections.Generic.List{System.String},System.Collections.Generic.List{System.String},FFmpeg.AutoGen.AVSubtitleType,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.RenderingSubtitlesEventArgs" /> class.
</summary>
@@ -4726,8 +4628,7 @@
</summary>
<seealso cref="T:System.EventArgs" />
</member>
<member
name="M:Unosquare.FFME.RenderingVideoEventArgs.#ctor(System.Windows.Media.Imaging.WriteableBitmap,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<member name="M:Unosquare.FFME.RenderingVideoEventArgs.#ctor(System.Windows.Media.Imaging.WriteableBitmap,Unosquare.FFME.StreamInfo,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.RenderingVideoEventArgs" /> class.
</summary>
@@ -4816,8 +4717,7 @@
<param name="ic">The ic.</param>
<returns>The list of stream infos</returns>
</member>
<member
name="M:Unosquare.FFME.MediaInfo.FindBestStreams(FFmpeg.AutoGen.AVFormatContext*,System.Collections.ObjectModel.ReadOnlyDictionary{System.Int32,Unosquare.FFME.StreamInfo})">
<member name="M:Unosquare.FFME.MediaInfo.FindBestStreams(FFmpeg.AutoGen.AVFormatContext*,System.Collections.ObjectModel.ReadOnlyDictionary{System.Int32,Unosquare.FFME.StreamInfo})">
<summary>
Finds the best streams for audio video, and subtitles.
</summary>
@@ -4832,8 +4732,7 @@
<param name="ic">The ic.</param>
<returns>The chapters</returns>
</member>
<member
name="M:Unosquare.FFME.MediaInfo.ExtractPrograms(FFmpeg.AutoGen.AVFormatContext*,System.Collections.ObjectModel.ReadOnlyDictionary{System.Int32,Unosquare.FFME.StreamInfo})">
<member name="M:Unosquare.FFME.MediaInfo.ExtractPrograms(FFmpeg.AutoGen.AVFormatContext*,System.Collections.ObjectModel.ReadOnlyDictionary{System.Int32,Unosquare.FFME.StreamInfo})">
<summary>
Extracts the programs from the input and creates associations between programs and streams.
</summary>
@@ -5083,8 +4982,7 @@
</summary>
<seealso cref="T:System.EventArgs" />
</member>
<member
name="M:Unosquare.FFME.MediaLogMessagEventArgs.#ctor(Unosquare.FFME.MediaElement,Unosquare.FFME.MediaLogMessageType,System.String)">
<member name="M:Unosquare.FFME.MediaLogMessagEventArgs.#ctor(Unosquare.FFME.MediaElement,Unosquare.FFME.MediaLogMessageType,System.String)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.MediaLogMessagEventArgs" /> class.
</summary>
@@ -5629,8 +5527,7 @@
A wrapper class for MmException.
</summary>
</member>
<member
name="M:Unosquare.FFME.Rendering.Wave.MmException.#ctor(Unosquare.FFME.Rendering.Wave.MmResult,System.String)">
<member name="M:Unosquare.FFME.Rendering.Wave.MmException.#ctor(Unosquare.FFME.Rendering.Wave.MmResult,System.String)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Rendering.Wave.MmException"/> class.
</summary>
@@ -5642,16 +5539,14 @@
Returns the Windows API result
</summary>
</member>
<member
name="M:Unosquare.FFME.Rendering.Wave.MmException.Try(Unosquare.FFME.Rendering.Wave.MmResult,System.String)">
<member name="M:Unosquare.FFME.Rendering.Wave.MmException.Try(Unosquare.FFME.Rendering.Wave.MmResult,System.String)">
<summary>
Helper function to automatically raise an exception on failure
</summary>
<param name="result">The result of the API call</param>
<param name="function">The API function name</param>
</member>
<member
name="M:Unosquare.FFME.Rendering.Wave.MmException.ErrorMessage(Unosquare.FFME.Rendering.Wave.MmResult,System.String)">
<member name="M:Unosquare.FFME.Rendering.Wave.MmException.ErrorMessage(Unosquare.FFME.Rendering.Wave.MmResult,System.String)">
<summary>
Creates an error message base don an erro result.
</summary>
@@ -5664,8 +5559,7 @@
A buffer of Wave samples for streaming to a Wave Output device
</summary>
</member>
<member
name="M:Unosquare.FFME.Rendering.Wave.WaveOutBuffer.#ctor(System.IntPtr,System.Int32,Unosquare.FFME.Rendering.Wave.IWaveProvider,System.Object)">
<member name="M:Unosquare.FFME.Rendering.Wave.WaveOutBuffer.#ctor(System.IntPtr,System.Int32,Unosquare.FFME.Rendering.Wave.IWaveProvider,System.Object)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.Rendering.Wave.WaveOutBuffer"/> class.
</summary>
@@ -5696,7 +5590,8 @@
</member>
<member name="M:Unosquare.FFME.Rendering.Wave.WaveOutBuffer.OnDone">
<summary>
this is called by the WAVE callback and should be used to refill the buffer
this is called by the Wave callback and should be used to refill the buffer.
This calls the .Read method on the stream
</summary>
<returns>true when bytes were written. False if no bytes were written.</returns>
</member>
@@ -5814,8 +5709,7 @@
The manufacturer guid (if provided)
</summary>
</member>
<member
name="M:Unosquare.FFME.Rendering.Wave.WaveOutCapabilities.SupportsWaveFormat(Unosquare.FFME.Rendering.Wave.SupportedWaveFormat)">
<member name="M:Unosquare.FFME.Rendering.Wave.WaveOutCapabilities.SupportsWaveFormat(Unosquare.FFME.Rendering.Wave.SupportedWaveFormat)">
<summary>
Checks to see if a given SupportedWaveFormat is supported
</summary>
@@ -5936,7 +5830,7 @@
<summary>
Closes the WaveOut device and disposes of buffers
</summary>
<param name="disposing">True if called from <see>Dispose</see></param>
<param name="alsoManaged">True if called from <see>Dispose</see></param>
</member>
<member name="M:Unosquare.FFME.Rendering.Wave.WavePlayer.Resume">
<summary>
@@ -6087,8 +5981,7 @@
<param name="requestedBytes">The requested bytes.</param>
<returns>The number of bytes that were read.</returns>
</member>
<member
name="M:Unosquare.FFME.Rendering.AudioRenderer.OnApplicationExit(System.Object,System.Windows.ExitEventArgs)">
<member name="M:Unosquare.FFME.Rendering.AudioRenderer.OnApplicationExit(System.Object,System.Windows.ExitEventArgs)">
<summary>
Called when [application exit].
</summary>
@@ -6135,8 +6028,7 @@
</summary>
<param name="requestedBytes">The requested bytes.</param>
</member>
<member
name="M:Unosquare.FFME.Rendering.AudioRenderer.ApplyVolumeAndBalance(System.Byte[],System.Int32,System.Int32)">
<member name="M:Unosquare.FFME.Rendering.AudioRenderer.ApplyVolumeAndBalance(System.Byte[],System.Int32,System.Int32)">
<summary>
Applies volume and balance to the audio samples storead in RedBuffer and writes them
to the specified target buffer.
@@ -6150,8 +6042,7 @@
Releases unmanaged and - optionally - managed resources.
</summary>
<param name="alsoManaged">
<c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.
</param>
<c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
</member>
<member name="T:Unosquare.FFME.Rendering.IRenderer">
<summary>
@@ -6260,8 +6151,7 @@
Waits for the renderer to be ready to render.
</summary>
</member>
<member
name="M:Unosquare.FFME.Rendering.SubtitleRenderer.Render(Unosquare.FFME.Decoding.MediaBlock,System.TimeSpan)">
<member name="M:Unosquare.FFME.Rendering.SubtitleRenderer.Render(Unosquare.FFME.Decoding.MediaBlock,System.TimeSpan)">
<summary>
Renders the specified media block.
</summary>
@@ -6557,8 +6447,7 @@
<param name="streamType">Type of the stream.</param>
<param name="streamIndex">Index of the stream.</param>
</member>
<member
name="M:Unosquare.FFME.MediaCodecOptions.FilterOptions(FFmpeg.AutoGen.AVCodecID,FFmpeg.AutoGen.AVFormatContext*,FFmpeg.AutoGen.AVStream*,FFmpeg.AutoGen.AVCodec*)">
<member name="M:Unosquare.FFME.MediaCodecOptions.FilterOptions(FFmpeg.AutoGen.AVCodecID,FFmpeg.AutoGen.AVFormatContext*,FFmpeg.AutoGen.AVStream*,FFmpeg.AutoGen.AVCodec*)">
<summary>
Retrieves a dictionary with the options for the specified codec.
Port of filter_codec_opts
@@ -6591,8 +6480,7 @@
</summary>
<seealso cref="T:System.Windows.RoutedEventArgs" />
</member>
<member
name="M:Unosquare.FFME.MediaOpeningRoutedEventArgs.#ctor(System.Windows.RoutedEvent,System.Object,Unosquare.FFME.MediaOptions,Unosquare.FFME.MediaInfo)">
<member name="M:Unosquare.FFME.MediaOpeningRoutedEventArgs.#ctor(System.Windows.RoutedEvent,System.Object,Unosquare.FFME.MediaOptions,Unosquare.FFME.MediaInfo)">
<summary>
Initializes a new instance of the <see cref="T:Unosquare.FFME.MediaOpeningRoutedEventArgs" /> class.
</summary>