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", ".orf", ".pef", ".ptx", ".pxn", ".r3d", ".raf", ".raw", ".rwl", ".rw2", ".rwz", ".sr2", ".srf", ".srw",
".tif", ".x3f", ".tif", ".x3f",
// normal // 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 Size _imageSize;
private ImagePanel _ip; private ImagePanel _ip;
@@ -67,10 +67,15 @@ namespace QuickLook.Plugin.ImageViewer
context.SetPreferredSizeFit(_imageSize, 0.8); context.SetPreferredSizeFit(_imageSize, 0.8);
else else
context.PreferredSize = new Size(1024, 768); context.PreferredSize = new Size(1024, 768);
Directory.SetCurrentDirectory(App.AppPath);
} }
public void View(string path, ContextObject context) public void View(string path, ContextObject context)
{ {
// set dcraw.exe for Magick.NET
Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
_ip = new ImagePanel(); _ip = new ImagePanel();
context.ViewerContent = _ip; context.ViewerContent = _ip;
@@ -81,11 +86,12 @@ namespace QuickLook.Plugin.ImageViewer
LoadImage(_ip, path); LoadImage(_ip, path);
context.IsBusy = false; context.IsBusy = false;
Directory.SetCurrentDirectory(App.AppPath);
} }
public void Cleanup() public void Cleanup()
{ {
Directory.SetCurrentDirectory(App.AppPath);
_ip = null; _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 sealed class BooleanToVisibilityHiddenConverter : DependencyObject, IValueConverter
{ {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
@@ -78,8 +96,7 @@ namespace QuickLook.Plugin.VideoViewer
public class TimeSpanToSecondsConverter : IValueConverter public class TimeSpanToSecondsConverter : IValueConverter
{ {
public object Convert(object value, Type targetType, public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
object parameter, CultureInfo culture)
{ {
if (value is TimeSpan) return ((TimeSpan) value).TotalSeconds; if (value is TimeSpan) return ((TimeSpan) value).TotalSeconds;
if (value is Duration) if (value is Duration)
@@ -88,15 +105,29 @@ namespace QuickLook.Plugin.VideoViewer
return 0d; return 0d;
} }
public object ConvertBack(object value, Type targetType, public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
object parameter, CultureInfo culture)
{ {
var result = TimeSpan.FromTicks((long) Math.Round(TimeSpan.TicksPerSecond * (double) value, 0)); 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(TimeSpan)) return result;
if (targetType == typeof(Duration)) return new Duration(result); if (targetType == typeof(Duration)) return new Duration(result);
return Activator.CreateInstance(targetType); 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.Diagnostics;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Text;
using System.Windows; using System.Windows;
using System.Xml.XPath; using System.Xml.XPath;
@@ -47,6 +48,7 @@ namespace QuickLook.Plugin.VideoViewer.FFmpeg
p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = _probePath; p.StartInfo.FileName = _probePath;
p.StartInfo.Arguments = $"-v quiet -print_format xml -show_streams -show_format \"{media}\""; p.StartInfo.Arguments = $"-v quiet -print_format xml -show_streams -show_format \"{media}\"";
p.StartInfo.StandardOutputEncoding = Encoding.UTF8;
p.Start(); p.Start();
p.WaitForExit(); p.WaitForExit();
@@ -67,7 +69,7 @@ namespace QuickLook.Plugin.VideoViewer.FFmpeg
public bool CanDecode() public bool CanDecode()
{ {
var info = infoNavigator.SelectSingleNode("/ffprobe/streams"); var info = infoNavigator.SelectSingleNode("/ffprobe/format");
return info != null; return info != null;
} }

View File

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

View File

@@ -62,6 +62,7 @@
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xaml"> <Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework> <RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference> </Reference>
@@ -105,8 +106,13 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="ffme\ffme.dll" /> <Content Include="ffme\ffme.dll" />
<Resource Include="Resources\compact-disc.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
<Resource Include="ffme\ffme.xml" /> <Resource Include="ffme\ffme.xml" />
<Content Include="ffme\ffme.pdb" />
<Content Include="ffme\ffmpeg.dll" /> <Content Include="ffme\ffmpeg.dll" />
<Content Include="ffme\ffmpeg.pdb" />
<Content Include="FFmpeg\x64\avcodec-57.dll"> <Content Include="FFmpeg\x64\avcodec-57.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </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" <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ControlButtonStyle" TargetType="Grid"> <Style x:Key="ControlButtonStyle" TargetType="Grid">
<Setter Property="Height" Value="50" /> <Setter Property="Height" Value="35" />
<Setter Property="Width" Value="50" /> <Setter Property="Width" Value="35" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="HorizontalAlignment" Value="Center" />

View File

@@ -7,26 +7,45 @@
xmlns:local="clr-namespace:QuickLook.Plugin.VideoViewer" xmlns:local="clr-namespace:QuickLook.Plugin.VideoViewer"
xmlns:ffmpeg="clr-namespace:Unosquare.FFME;assembly=ffme" xmlns:ffmpeg="clr-namespace:Unosquare.FFME;assembly=ffme"
mc:Ignorable="d" mc:Ignorable="d"
Background="#B2454545" x:Name="userControl"
d:DesignHeight="449.167" d:DesignWidth="767"> Background="#CC4E4E4E"
d:DesignHeight="450" d:DesignWidth="450">
<Grid> <Grid>
<Grid.Resources> <Grid.Resources>
<ResourceDictionary> <ResourceDictionary>
<local:TimeSpanToSecondsConverter x:Key="TimeSpanToSecondsConverter" /> <local:TimeSpanToSecondsConverter x:Key="TimeSpanToSecondsConverter" />
<local:BooleanToVisibilityVisibleConverter x:Key="BooleanToVisibilityVisibleConverter" />
<local:BooleanToVisibilityHiddenConverter x:Key="BooleanToVisibilityHiddenConverter" /> <local:BooleanToVisibilityHiddenConverter x:Key="BooleanToVisibilityHiddenConverter" />
<local:DurationToTimeSpanConverter x:Key="DurationToTimeSpanConverter" />
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles.xaml" /> <ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
</Grid.Resources> </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> <Grid.Background>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Offset="0.0" Color="#00000000" /> <GradientStop Offset="0.0" Color="#00000000" />
@@ -42,22 +61,30 @@
<Grid.Style> <Grid.Style>
<Style TargetType="{x:Type Grid}"> <Style TargetType="{x:Type Grid}">
<Style.Triggers> <Style.Triggers>
<Trigger Property="IsMouseOver" Value="True"> <MultiDataTrigger>
<Trigger.EnterActions> <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> <BeginStoryboard>
<Storyboard> <Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.2" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1"
Duration="0:0:0.2" />
</Storyboard> </Storyboard>
</BeginStoryboard> </BeginStoryboard>
</Trigger.EnterActions> </MultiDataTrigger.EnterActions>
<Trigger.ExitActions> <MultiDataTrigger.ExitActions>
<BeginStoryboard> <BeginStoryboard>
<Storyboard> <Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" To="0" Duration="0:0:0.2" /> <DoubleAnimation Storyboard.TargetProperty="Opacity" To="0"
Duration="0:0:0.2" />
</Storyboard> </Storyboard>
</BeginStoryboard> </BeginStoryboard>
</Trigger.ExitActions> </MultiDataTrigger.ExitActions>
</Trigger> </MultiDataTrigger>
</Style.Triggers> </Style.Triggers>
</Style> </Style>
</Grid.Style> </Grid.Style>
@@ -72,13 +99,13 @@
<Grid Grid.Row="2"> <Grid Grid.Row="2">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="149" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" <StackPanel Grid.Column="0" VerticalAlignment="Center"
Orientation="Horizontal" Margin="20,0,0,0"> Orientation="Horizontal" Margin="10,0,0,0">
<Grid x:Name="buttonMute" Style="{StaticResource ControlButtonStyle}"> <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> <fa:ImageAwesome.Style>
<Style TargetType="fa:ImageAwesome"> <Style TargetType="fa:ImageAwesome">
<Setter Property="Icon" Value="VolumeOff" /> <Setter Property="Icon" Value="VolumeOff" />
@@ -92,17 +119,18 @@
</fa:ImageAwesome.Style> </fa:ImageAwesome.Style>
</fa:ImageAwesome> </fa:ImageAwesome>
</Grid> </Grid>
<Slider Style="{StaticResource CustomSliderStyle}" Width="80" Maximum="1" <Slider Style="{StaticResource CustomSliderStyle}" MaxWidth="75" Maximum="1"
Value="{Binding Volume, ElementName=mediaElement}" 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>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center"> <StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center">
<Grid x:Name="buttonBackward" Style="{StaticResource ControlButtonStyle}"> <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>
<Grid Width="7" /> <Grid Width="3" />
<Grid x:Name="buttonPlayPause" Style="{StaticResource ControlButtonStyle}"> <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> <fa:ImageAwesome.Style>
<Style> <Style>
<Setter Property="fa:ImageAwesome.Icon" Value="Pause" /> <Setter Property="fa:ImageAwesome.Icon" Value="Pause" />
@@ -116,22 +144,22 @@
</fa:ImageAwesome.Style> </fa:ImageAwesome.Style>
</fa:ImageAwesome> </fa:ImageAwesome>
</Grid> </Grid>
<Grid Width="7" /> <Grid Width="3" />
<Grid x:Name="buttonStop" Style="{StaticResource ControlButtonStyle}"> <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>
<Grid Width="7" /> <Grid Width="3" />
<Grid x:Name="buttonForward" Style="{StaticResource ControlButtonStyle}"> <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> </Grid>
</StackPanel> </StackPanel>
<StackPanel Grid.Column="2" HorizontalAlignment="Right" VerticalAlignment="Center" <StackPanel Grid.Column="2" HorizontalAlignment="Right" VerticalAlignment="Center"
Orientation="Horizontal" Margin="0,0,20,0"> Orientation="Horizontal" Margin="0,0,10,0">
<TextBlock FontSize="16" Foreground="#FFEFEFEF" <TextBlock FontSize="14" Foreground="#FFEFEFEF"
Text="{Binding Position, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement}" /> Text="{Binding Position, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement}" />
<TextBlock FontSize="16" Text=" / " Foreground="#FFEFEFEF" /> <TextBlock FontSize="14" Text=" / " Foreground="#FFEFEFEF" />
<TextBlock FontSize="16" Foreground="#FFEFEFEF" <TextBlock FontSize="14" Foreground="#FFEFEFEF"
Text="{Binding NaturalDuration.TimeSpan, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement}" /> Text="{Binding NaturalDuration, StringFormat=hh\\:mm\\:ss, ElementName=mediaElement, Converter={StaticResource DurationToTimeSpanConverter}}" />
</StackPanel> </StackPanel>
</Grid> </Grid>
</Grid> </Grid>

View File

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

View File

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