@@ -7,10 +7,38 @@ namespace OpenCvSharp
7
7
/// <summary>
8
8
///
9
9
/// </summary>
10
- public abstract class FrameSource : DisposableCvObject
10
+ public class FrameSource : DisposableCvObject
11
11
{
12
+ private Ptr ? ptrObj ;
13
+
12
14
#region Init & Disposal
13
15
16
+ /// <summary>
17
+ /// Creates instance from cv::Ptr<T> .
18
+ /// ptr is disposed when the wrapper disposes.
19
+ /// </summary>
20
+ /// <param name="ptr"></param>
21
+ private static FrameSource FromPtr ( IntPtr ptr )
22
+ {
23
+ if ( ptr == IntPtr . Zero )
24
+ throw new OpenCvSharpException ( "Invalid FrameSource pointer" ) ;
25
+ var obj = new FrameSource ( ) ;
26
+ var ptrObj = new Ptr ( ptr ) ;
27
+ obj . ptrObj = ptrObj ;
28
+ obj . ptr = ptr ;
29
+ return obj ;
30
+ }
31
+
32
+ /// <summary>
33
+ /// Releases managed resources
34
+ /// </summary>
35
+ protected override void DisposeManaged ( )
36
+ {
37
+ ptrObj ? . Dispose ( ) ;
38
+ ptrObj = null ;
39
+ base . DisposeManaged ( ) ;
40
+ }
41
+
14
42
/// <summary>
15
43
///
16
44
/// </summary>
@@ -19,7 +47,7 @@ public static FrameSource CreateFrameSource_Empty()
19
47
{
20
48
NativeMethods . HandleException (
21
49
NativeMethods . superres_createFrameSource_Empty ( out var ptr ) ) ;
22
- return FrameSourceImpl . FromPtr ( ptr ) ;
50
+ return FromPtr ( ptr ) ;
23
51
}
24
52
25
53
/// <summary>
@@ -36,7 +64,7 @@ public static FrameSource CreateFrameSource_Video(string fileName)
36
64
37
65
NativeMethods . HandleException (
38
66
NativeMethods . superres_createFrameSource_Video ( fileName , out var ptr ) ) ;
39
- return FrameSourceImpl . FromPtr ( ptr ) ;
67
+ return FromPtr ( ptr ) ;
40
68
}
41
69
42
70
/// <summary>
@@ -53,7 +81,7 @@ public static FrameSource CreateFrameSource_Video_CUDA(string fileName)
53
81
54
82
NativeMethods . HandleException (
55
83
NativeMethods . superres_createFrameSource_Video_CUDA ( fileName , out var ptr ) ) ;
56
- return FrameSourceImpl . FromPtr ( ptr ) ;
84
+ return FromPtr ( ptr ) ;
57
85
}
58
86
59
87
/// <summary>
@@ -65,24 +93,65 @@ public static FrameSource CreateFrameSource_Camera(int deviceId)
65
93
{
66
94
NativeMethods . HandleException (
67
95
NativeMethods . superres_createFrameSource_Camera ( deviceId , out var ptr ) ) ;
68
- return FrameSourceImpl . FromPtr ( ptr ) ;
96
+ return FromPtr ( ptr ) ;
69
97
}
70
98
71
99
#endregion
72
100
73
101
#region Methods
74
-
102
+
75
103
/// <summary>
76
104
///
77
105
/// </summary>
78
106
/// <param name="frame"></param>
79
- public abstract void NextFrame ( OutputArray frame ) ;
107
+ public virtual void NextFrame ( OutputArray frame )
108
+ {
109
+ ThrowIfDisposed ( ) ;
110
+ if ( frame == null )
111
+ throw new ArgumentNullException ( nameof ( frame ) ) ;
112
+ frame . ThrowIfNotReady ( ) ;
113
+
114
+ NativeMethods . HandleException (
115
+ NativeMethods . superres_FrameSource_nextFrame ( ptr , frame . CvPtr ) ) ;
116
+
117
+ frame . Fix ( ) ;
118
+ GC . KeepAlive ( this ) ;
119
+ GC . KeepAlive ( frame ) ;
120
+ }
80
121
81
122
/// <summary>
82
123
///
83
124
/// </summary>
84
- public abstract void Reset ( ) ;
125
+ public virtual void Reset ( )
126
+ {
127
+ ThrowIfDisposed ( ) ;
128
+ NativeMethods . HandleException (
129
+ NativeMethods . superres_FrameSource_reset ( ptr ) ) ;
130
+ GC . KeepAlive ( this ) ;
131
+ }
85
132
86
133
#endregion
134
+
135
+ internal class Ptr : OpenCvSharp . Ptr
136
+ {
137
+ public Ptr ( IntPtr ptr ) : base ( ptr )
138
+ {
139
+ }
140
+
141
+ public override IntPtr Get ( )
142
+ {
143
+ NativeMethods . HandleException (
144
+ NativeMethods . superres_Ptr_FrameSource_get ( ptr , out var ret ) ) ;
145
+ GC . KeepAlive ( this ) ;
146
+ return ret ;
147
+ }
148
+
149
+ protected override void DisposeUnmanaged ( )
150
+ {
151
+ NativeMethods . HandleException (
152
+ NativeMethods . superres_Ptr_FrameSource_delete ( ptr ) ) ;
153
+ base . DisposeUnmanaged ( ) ;
154
+ }
155
+ }
87
156
}
88
157
}
0 commit comments