diff --git a/src/DolbyIO.Comms.Native/video_frame_handler.h b/src/DolbyIO.Comms.Native/video_frame_handler.h index 4566df5..107b4ad 100644 --- a/src/DolbyIO.Comms.Native/video_frame_handler.h +++ b/src/DolbyIO.Comms.Native/video_frame_handler.h @@ -8,12 +8,11 @@ namespace dolbyio::comms::native { class video_frame_handler : public dolbyio::comms::video_frame_handler { public: void sink(video_sink* sink) { - // Aliasing constructor - _sink = std::shared_ptr(std::shared_ptr{}, sink); + _sink = sink; } virtual std::shared_ptr sink() { - return _sink; + return std::shared_ptr(_sink, null_deleter{}); } virtual std::shared_ptr source() { @@ -21,7 +20,7 @@ class video_frame_handler : public dolbyio::comms::video_frame_handler { } private: - std::shared_ptr _sink; + dolbyio::comms::native::video_sink* _sink; }; } // namespace dolbyio::comms::native diff --git a/src/DolbyIO.Comms.Sdk/Native/Structs/Handles/VideoFrameHandlerHandle.cs b/src/DolbyIO.Comms.Sdk/Native/Structs/Handles/VideoFrameHandlerHandle.cs index 7427301..dd469ee 100644 --- a/src/DolbyIO.Comms.Sdk/Native/Structs/Handles/VideoFrameHandlerHandle.cs +++ b/src/DolbyIO.Comms.Sdk/Native/Structs/Handles/VideoFrameHandlerHandle.cs @@ -13,7 +13,7 @@ public VideoFrameHandlerHandle() protected override bool ReleaseHandle() { - return Native.DeleteVideoSink(handle); + return Native.DeleteVideoFrameHandler(handle); } } } \ No newline at end of file diff --git a/src/DolbyIO.Comms.Tests/VideoTests.cs b/src/DolbyIO.Comms.Tests/VideoTests.cs index 24c8668..876e8c8 100644 --- a/src/DolbyIO.Comms.Tests/VideoTests.cs +++ b/src/DolbyIO.Comms.Tests/VideoTests.cs @@ -2,6 +2,11 @@ namespace DolbyIO.Comms.Tests { + class MySink : VideoSink + { + override public void OnFrame(VideoFrame f) {} + } + [Collection("Sdk")] public class VideoTests { @@ -20,5 +25,20 @@ public async void Test_Video_CanCallScreenShareMethods() await _fixture.Sdk.Video.Local.StartScreenShareAsync(source, null); await _fixture.Sdk.Video.Local.StopScreenShareAsync(); } + + [Fact] + public void Test_Video_canCreateAndDeleteFrameHandler() + { + using (var sink = new MySink()) + { + using(var frameHanbdler = new VideoFrameHandler()) + { + frameHanbdler.Sink = sink; + } + } + + GC.Collect(); + GC.WaitForPendingFinalizers(); + } } } \ No newline at end of file