diff --git a/FFMediaToolkit/Decoding/AudioStream.cs b/FFMediaToolkit/Decoding/AudioStream.cs
index 3562019..333b75a 100644
--- a/FFMediaToolkit/Decoding/AudioStream.cs
+++ b/FFMediaToolkit/Decoding/AudioStream.cs
@@ -13,6 +13,7 @@
public unsafe class AudioStream : MediaStream
{
private SwrContext* swrContext;
+ private bool isDisposed;
///
/// Initializes a new instance of the class.
@@ -132,9 +133,14 @@ public bool TryGetFrame(TimeSpan time, out AudioData data)
///
public override void Dispose()
{
- fixed (SwrContext** ptr = &swrContext)
+ if (!isDisposed)
{
- ffmpeg.swr_free(ptr);
+ fixed (SwrContext** ptr = &swrContext)
+ {
+ ffmpeg.swr_free(ptr);
+ }
+
+ isDisposed = true;
}
base.Dispose();
diff --git a/FFMediaToolkit/Decoding/MediaStream.cs b/FFMediaToolkit/Decoding/MediaStream.cs
index bcb3e67..45c3c79 100644
--- a/FFMediaToolkit/Decoding/MediaStream.cs
+++ b/FFMediaToolkit/Decoding/MediaStream.cs
@@ -10,6 +10,8 @@
///
public class MediaStream : IDisposable
{
+ private bool isDisposed;
+
///
/// Initializes a new instance of the class.
///
@@ -56,8 +58,12 @@ internal MediaStream(Decoder stream, MediaOptions options)
///
public virtual void Dispose()
{
- Stream.DiscardBufferedData();
- Stream.Dispose();
+ if (!isDisposed)
+ {
+ Stream.DiscardBufferedData();
+ Stream.Dispose();
+ isDisposed = true;
+ }
}
///
diff --git a/FFMediaToolkit/Decoding/VideoStream.cs b/FFMediaToolkit/Decoding/VideoStream.cs
index 619bff5..f59394c 100644
--- a/FFMediaToolkit/Decoding/VideoStream.cs
+++ b/FFMediaToolkit/Decoding/VideoStream.cs
@@ -16,6 +16,7 @@ public class VideoStream : MediaStream
private readonly int outputFrameStride;
private readonly int requiredBufferSize;
private readonly ImageConverter converter;
+ private bool isDisposed;
///
/// Initializes a new instance of the class.
@@ -232,7 +233,12 @@ public unsafe bool TryGetFrame(TimeSpan time, IntPtr buffer, int bufferStride)
///
public override void Dispose()
{
- converter.Dispose();
+ if (!isDisposed)
+ {
+ converter.Dispose();
+ isDisposed = true;
+ }
+
base.Dispose();
}