NEWS 18.9 KB
Newer Older
Martin Finkel's avatar
Martin Finkel committed
1
2
3
4
5
6
LibVLCSharp version 3.6.7
=========================
* Updated samples.
* Update .NET and Uno.SourceGenerationTasks SDKs.
* Interop: Fix mediaplayer vmem cleanup callback regression https://code.videolan.org/videolan/LibVLCSharp/-/issues/339

Martin Finkel's avatar
Martin Finkel committed
7
8
9
10
11
12
13
14
15
LibVLCSharp version 3.6.6
=========================
* Add support to Eto.Forms UI framework thanks to @rafntor.
* Core: Make Core.Initialize() optional.
* WPF: Add defensive checks around video view detach process.
* WPF: Fix .NET 4.x support.
* WPF: Remove WinForms dependency.
* Documentation improvements.

Martin Finkel's avatar
Martin Finkel committed
16
17
18
19
LibVLCSharp version 3.6.5
=========================
* Fix Xamarin.Forms iOS MediaElement startup regression. https://code.videolan.org/videolan/LibVLCSharp/-/issues/529

Martin Finkel's avatar
Martin Finkel committed
20
21
22
23
24
LibVLCSharp version 3.6.4
=========================
* hotfix for net6 target - third time's the charm.
* Add .NET 6 support for WinForms and WPF integrations.

Martin Finkel's avatar
Martin Finkel committed
25
26
27
28
29
LibVLCSharp version 3.6.3
=========================
* hotfix for net6 target - missing comoilation directive.
* build: use C# 9

Martin Finkel's avatar
Martin Finkel committed
30
31
32
33
34
35
36
37
LibVLCSharp version 3.6.2
=========================
* media: rewrite slashes for windows https://code.videolan.org/videolan/LibVLCSharp/-/issues/517
* media: clarify error message if native media constructor fails
* iOS: Add additional defensive lifetime check https://code.videolan.org/videolan/LibVLCSharp/-/issues/520
* WPF: Fix WPF VideoView foreground window position bug by @Yelo420 / Philip https://code.videolan.org/videolan/LibVLCSharp/-/issues/523
* core: Add .NET 6 support

Martin Finkel's avatar
Martin Finkel committed
38
39
40
41
42
43
44
45
46
47
LibVLCSharp version 3.6.1
=========================
* tvOS [BREAKING CHANGE]: Due to upstream breaking packaging change, LibVLCSharp 3.6.1 and above only work with LibVLC.tvOS 3.3.17 and above.
see https://code.videolan.org/videolan/libvlc-nuget/-/commit/031ad01a30053208a657d61cbc340f703ac04f32 for more details
* MediaElement XF: Add visibility property for track and lock buttons by @egbakou
* MediaElement XF: Fixes TrackSelection taking too much space @egbakou
* nuget: Use readmes for nuget.org pages
* documentation improvements
* Core: add mediaplayer helper SeekTo method

Martin Finkel's avatar
Martin Finkel committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
LibVLCSharp version 3.6.0
=========================
* Core: Media.AddSlave now has an URI overload, like the Media ctor
* XF: Add Lock screen feature to the MediaElement by @egbakou https://github.com/videolan/libvlcsharp/pull/223
* XF [BREAKING CHANGE]: Add Video track selection feature and rework other track management for the MediaElement by @egbakou https://github.com/videolan/libvlcsharp/pull/225
* WPF: Fix airspace issue to synchronize content over video by @DengQingFeng https://github.com/videolan/libvlcsharp/pull/226
* WPF: Add TabControl support for the VideoView by @Yelo420 https://github.com/videolan/libvlcsharp/pull/227
* CI and build improvements.

LibVLCSharp version 3.5.1
=========================
* Core: fix Media leaks
* Core: remove check potentially preventing proper disposal
* Core: fix support for self contained single file apps https://code.videolan.org/videolan/LibVLCSharp/-/issues/470
* Core: docs: add hint in exception message for missing libvlc on Android 
* WPF/WinForms: Use stable versions TFMs 
* Samples: Update all dependencies
* Avalonia: Bump reference to include fix for https://code.videolan.org/videolan/LibVLCSharp/-/issues/458
* Uno: Uno: Temporary workaround to fix CI build until we move to Uno 3 https://github.com/unoplatform/uno/issues/6137
* docs and licensing: Mention libvlcsharp commercial licensing.

Martin Finkel's avatar
Martin Finkel committed
69
70
71
72
73
74
75
LibVLCSharp version 3.5.0
=========================
* Xamarin.Forms: Fix namespace clashes with newer XF versions.
* CI and build improvements
* Various docs improvements
* Core: Use unicode charset for LoadLibrary https://code.videolan.org/videolan/LibVLCSharp/-/issues/453

Martin Finkel's avatar
Martin Finkel committed
76
77
78
79
LibVLCSharp.Avalonia version 3.4.9-alpha01
=========================
* Initial Avalonia support (Linux, macOS, Windows) by @shawnallen85

Martin Finkel's avatar
Martin Finkel committed
80
81
82
83
84
85
86
87
88
LibVLCSharp version 3.4.9
=========================
* documentation improvements
* improve samples with systematic libvlc resources disposal
* WinForms: Add additional null checks
* Core: Add easier way to enable verbose debug logs, hint with VS intellisense
* Core: Fix incorrect libvlc interop for imem non-seekable streams by @jeremyVignelles https://github.com/videolan/libvlcsharp/pull/129
* WPF: Improve the view to make it more reliable in some situations by @SkinnySackboy https://github.com/videolan/libvlcsharp/pull/172

Martin Finkel's avatar
Martin Finkel committed
89
90
91
92
93
94
95
96
LibVLCSharp version 3.4.8
=========================
* documentation improvements
* Fix memory leak https://code.videolan.org/videolan/LibVLCSharp/-/issues/367
* Core: Avoid copy in StreamMediaInput by @jeremyVignelles
* Core: Remove Mediaplayer.Stop() call in Mediaplayer.Dispose() by @mct62
* Enable nightly build continuous deployment on feedz for 3.x branch

Martin Finkel's avatar
Martin Finkel committed
97
98
99
100
101
LibVLCSharp version 3.4.7
=========================
* documentation updates
* MediaElement: Fix display bug in landscape mode on iOS by @kakone https://code.videolan.org/videolan/LibVLCSharp/-/issues/270

Martin Finkel's avatar
Martin Finkel committed
102
103
104
105
106
107
108
109
110
LibVLCSharp version 3.4.6
=========================
* documentation updates
* android: set audio resampler automatically by @encrypt0r
* core: 
- fix libvlc log interop for macOS netcore target
- refactoring libvlc loading.
* fix WPF xamarin.forms support https://code.videolan.org/videolan/LibVLCSharp/-/issues/364

Martin Finkel's avatar
Martin Finkel committed
111
112
113
114
115
116
117
118
LibVLCSharp version 3.4.5
=========================
* Uno.Android: Fix android packaging import by @kakone. One additional Xamarin.Android tooling issue is still blocking Uno.Android support though.
* MediaPlayer: Add full chapter descriptions by new contributor @igor-rif-shevchenko
* Uno / UWP MediaElement: Various fixes by @kakone
* Core: Add FormattedLog helper.
* Media: Add libvlc option extra ctor param for convenience.

Martin Finkel's avatar
Martin Finkel committed
119
120
121
122
123
124
125
126
LibVLCSharp version 3.4.4
=========================
* Core: Improve LibVLC loading error messages
* Core: Remove dead Unity code
* Core: Bring back C#8 support, nullables, .netstandard2.1 target. Work by @jeremyVignelles, users need an up to date Xamarin.Android build otherwise their linker will freeze. https://code.videolan.org/videolan/LibVLCSharp/-/issues/78
* Core: Add new constructor to media that accepts a URI, by new contributor @mhmd_azeez https://code.videolan.org/videolan/LibVLCSharp/-/merge_requests/12
* Uno.UWP: Customize LibVLCSharp.Uno.pri file generation by @kakone, fixes Uno UWP support https://code.videolan.org/videolan/LibVLCSharp/-/issues/294

Martin Finkel's avatar
Martin Finkel committed
127
LibVLCSharp version 3.4.3
Martin Finkel's avatar
Martin Finkel committed
128
=========================
Martin Finkel's avatar
Martin Finkel committed
129
130
131
132
133
134
* Fix build for older C# compilers
* Centralize and simplify static callbacks management, and introduce new Media constructor with MediaInput abstraction https://github.com/videolan/libvlcsharp/pull/87
* Always load libcpp on Android https://github.com/videolan/libvlcsharp/pull/92
* Align features description in the csproj with the readme.
* Align msbuild sdk extras usage in Uno project with the rest of the solution.

Martin Finkel's avatar
Martin Finkel committed
135
136
137
138
139
LibVLCSharp version 3.4.2
=========================
* Android: Fix libvlc loading failure on Android < 17 https://code.videolan.org/videolan/LibVLCSharp/issues/280
* WPF: Fix memory leak in the VideoView by @srollinet https://github.com/videolan/libvlcsharp/pull/90

Martin Finkel's avatar
Martin Finkel committed
140
141
142
143
144
145
146
147
LibVLCSharp version 3.4.1
=========================
* Android: Fix initialization error code check
* VolumeChanged event bug workaround https://github.com/videolan/libvlcsharp/pull/83
* Revert part of the C# 8 Nullable support PR to fix https://code.videolan.org/videolan/LibVLCSharp/issues/269
* CI: Move to Cake and enable sample build
* Fix callback interop https://github.com/videolan/libvlcsharp/pull/84

Martin Finkel's avatar
Martin Finkel committed
148
149
150
151
152
153
154
155
156
LibVLCSharp version 3.4.0
=========================
* Logging interop: Fix libvlc logging for Apple platforms
* Documentation: Markdown pages are now part of the git repo
* Adds MediaPlayerElement for Uno Platform: https://github.com/videolan/libvlcsharp/pull/77 by @kakone
* Build: Remove unnecessary defines
* Enable C# 8 nullable support for all libvlcsharp projects: https://github.com/videolan/libvlcsharp/pull/75 by @jeremyVignelles
* UWP: Fix crash when VideoView is created Collapsed and allow swapchain creation after the videoview is created (when visibility changes) https://code.videolan.org/videolan/LibVLCSharp/issues/261

Martin Finkel's avatar
Martin Finkel committed
157
158
159
160
LibVLCSharp version 3.3.1
=========================
* Add support for the Uno Platform by @kakone https://github.com/videolan/libvlcsharp/pull/76 Fixes https://code.videolan.org/videolan/LibVLCSharp/issues/232

Martin Finkel's avatar
Martin Finkel committed
161
162
163
164
165
166
167
LibVLCSharp version 3.3.0
=========================
* Docs: All public APIs are now documented and accessible through intellisense https://code.videolan.org/videolan/LibVLCSharp/issues/33
* MediaElement: Fix bug on iOS showing renderer item duplicate because of mdns usage. https://code.videolan.org/videolan/LibVLCSharp/issues/237
* RendererDiscoverer: Simplify API usage by inferring protocol depending on platform (not breaking public API).
* UWP: Makes the UWP VideoView more MVVM friendly https://github.com/videolan/libvlcsharp/pull/73

Martin Finkel's avatar
Martin Finkel committed
168
169
170
171
172
LibVLCSharp version 3.2.5
=========================
* MediaElement: Fix RendererDiscovery bug triggered when some controls are hidden. https://code.videolan.org/videolan/LibVLCSharp/issues/235
* Core: Add more docs (on-going https://code.videolan.org/videolan/LibVLCSharp/issues/33)

Martin Finkel's avatar
Martin Finkel committed
173
174
175
176
177
178
179
180
LibVLCSharp version 3.2.4
=========================
* Core: bit of documentation comments for public APIs, remove dead code
* Media: Fix wrong event handler type
* MediaConfiguration: Correctly handle FileCaching and NetworkCaching options in MediaConfiguration by contributor Andrei
* Update MSBuild.Sdk.Extras
* WPF/WinForms: Add .NET Core 3 support by contributor Ashkan Daie 

Martin Finkel's avatar
Martin Finkel committed
181
182
183
184
LibVLCSharp version 3.2.3
=========================
* tvOS: Add missing AOT support for native events https://code.videolan.org/videolan/LibVLCSharp/issues/222

Martin Finkel's avatar
Martin Finkel committed
185
186
187
188
189
190
191
192
193
LibVLCSharp version 3.2.2
=========================
* Core: Fix size_t C# interop https://code.videolan.org/videolan/LibVLCSharp/issues/217
* Core: libvlc logging https://code.videolan.org/videolan/LibVLCSharp/issues/216:
    - Allow dynamic buffer size allocation for logs
    - Fix libvlc log interop on Linux 64 bits
* WPF: Move the focus to the parent window when ALT+F4 is pressed.
* tvOS: Fix device link error regression https://code.videolan.org/videolan/LibVLCSharp/issues/218

Martin Finkel's avatar
Martin Finkel committed
194
195
196
197
LibVLCSharp version 3.2.1
=========================
* MediaPlayerElement minor fix: Some buttons from PlaybackControls would not hide https://code.videolan.org/videolan/LibVLCSharp/issues/206

Martin Finkel's avatar
Martin Finkel committed
198
199
200
201
LibVLCSharp version 3.2.0
=========================
* MediaPlayerElement release https://code.videolan.org/videolan/LibVLCSharp/issues/45

Martin Finkel's avatar
Martin Finkel committed
202
203
204
205
206
LibVLCSharp version 3.1.1
=========================
* Core: MediaPlayer: Allow to unset remote renderer https://code.videolan.org/videolan/LibVLCSharp/issues/198
* UWP: Fix NullReferenceException when a disposed VideoView is added to the tree https://code.videolan.org/videolan/LibVLCSharp/issues/193

Martin Finkel's avatar
Martin Finkel committed
207
208
209
210
211
LibVLCSharp version 3.1.0
=========================
* Fix Windows XP support by disabling message box for plugins that fail to load https://code.videolan.org/videolan/LibVLCSharp/issues/174
* [BREAKING API] strong typing Audio Channel API https://code.videolan.org/videolan/LibVLCSharp/issues/169

Martin Finkel's avatar
Martin Finkel committed
212
213
214
215
216
217
218
LibVLCSharp version 3.0.3
=========================
* Fix AOT for dialogs callbacks on iOS device https://code.videolan.org/videolan/LibVLCSharp/issues/166
* WPF: Propagate DataContext to enable databinding for VideoView's child elements
* MediaConfiguration: Add crossplatform configuration API to enable hardware decoding and a couple other settings https://code.videolan.org/videolan/LibVLCSharp/issues/132
* Add back libvlc logging support, on all platforms and runtimes.

Martin Finkel's avatar
Martin Finkel committed
219
220
221
222
223
LibVLCSharp version 3.0.2
=========================
* Improve nuget docs
* Fix iOS linker issue https://code.videolan.org/videolan/LibVLCSharp/issues/163

Martin Finkel's avatar
Martin Finkel committed
224
225
226
227
228
LibVLCSharp version 3.0.1
=========================
* Add libvlc/libvlcsharp version check
* Add Xamarin.Forms 4.0 support for LibVLCSharp.Forms

Martin Finkel's avatar
Martin Finkel committed
229
230
231
232
233
LibVLCSharp version 3.0.0
=========================
* First stable release: https://mfkl.github.io/libvlc/crossplatform/xamarin/forms/release/2019/05/13/LibVLCSharp-goes-stable.html
* VS2019 support

Martin Finkel's avatar
Martin Finkel committed
234
235
236
237
238
239
LibVLCSharp version 0.8.1
=========================
* Fix ARM debug support for UWP.
* LibVLC: Remove Log API in preparation for 3.0 release
* Android: Update AWindow aar autogen bindings.

Martin Finkel's avatar
Martin Finkel committed
240
241
242
243
244
LibVLCSharp version 0.8.0
=========================
* Fix root namespace for GTK/WPF X.F backends.
* Add UWP support for mobile, desktop and Xbox.

Martin Finkel's avatar
Martin Finkel committed
245
246
247
248
249
LibVLCSharp version 0.7.0
=========================
* WPF: Fix HiDPi support in relation to airspace workaround. https://github.com/videolan/libvlcsharp/pull/42
* Improve MVVM scenario and fix mediaplayer change event. [API CHANGE] https://github.com/videolan/libvlcsharp/pull/36

Martin Finkel's avatar
Martin Finkel committed
250
251
252
253
254
255
256
257
258
259
LibVLCSharp version 0.6.0
=========================
* Fix UTF8 interop everywhere and free libvlc strings where needed.
* Completed libvlc API coverage. [API CHANGE] https://code.videolan.org/videolan/LibVLCSharp/issues/104
* Add native API coverage unit test
* Add public API docs
* Rework main README and add sub-READMEs per platform.
* Update linux install steps.
* Fixed native crash when disposing RendererDiscoverer https://code.videolan.org/videolan/LibVLCSharp/issues/124

Martin Finkel's avatar
Martin Finkel committed
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
LibVLCSharp version 0.5.0
=========================
* Docs: Fix comments for LibVLC ctor
* Improve test setup, mostly for CI: 
- can be run from `dotnet run` 
- targets netcoreapp now and uses NUnitLite
- remove network calls
* Fix libvlc loading from .NET Core on macOS
* [API CHANGE] move Media enums outside the Media class
* [API CHANGE] Media.Parse is now async only.
* [API CHANGE] Refactor MediaList. Libvlc locking is now handled internally for easier use. LINQ ready.
* net40 build of libvlcsharp has a new dependency to enable async/await support: Microsoft.Bcl.Async. This means you need binding redirects in your consuming projects.
example of binding redirect file: https://code.videolan.org/videolan/LibVLCSharp/blob/master/Samples/LibVLCSharp.Windows.Net40.Sample/app.config
* Fix network browsing. https://code.videolan.org/videolan/LibVLCSharp/issues/108

Martin Finkel's avatar
Martin Finkel committed
275
276
277
278
279
280
281
282
283
284
285
LibVLCSharp version 0.4.2
=========================
* Android: remove unnecessary native call https://github.com/videolan/libvlcsharp/commit/338d11d1c3619efe7232a8526a12ba195006332b
* tvOS: Fix device builds
* Add new assets thanks to Jeremy
* Core.Initialize refactoring https://code.videolan.org/videolan/LibVLCSharp/issues/98
- fixes netcore support
- add docs
- allow loading libvlc from custom path
- document Linux custom path loading process

Martin Finkel's avatar
Martin Finkel committed
286
287
288
289
LibVLCSharp version 0.4.1
=========================
* Fix viewpoint interop for 360 videos https://code.videolan.org/videolan/LibVLCSharp/issues/101

Martin Finkel's avatar
Martin Finkel committed
290
291
292
293
294
LibVLCSharp version 0.4.0
=========================
* Add tvOS support https://code.videolan.org/videolan/LibVLCSharp/commit/e17a2a3a3a824b3be8401905690b8d7b6aacc970
* Fix wrong log file pointer return https://code.videolan.org/videolan/LibVLCSharp/commit/014d3802ae2ebc12ff865ccc59d1767442fdf697

Martin Finkel's avatar
Martin Finkel committed
295
296
297
298
299
LibVLCSharp version 0.3.0
=========================
* Add GTK# support (with Xamarin.Forms support) on Linux and Windows. https://code.videolan.org/videolan/LibVLCSharp/commit/a927af513addeacb7c17541d06c6b7d16bfef9c0
* Fix dialog reset interop bug https://code.videolan.org/videolan/LibVLCSharp/commit/c954cad1be8642bf96a74650e7ecd1c814b323ee

Martin Finkel's avatar
Martin Finkel committed
300
301
302
303
304
305
306
307
308
LibVLCSharp version 0.2.0
=========================
* [Docs] Add public API comments
* Use readonly structs https://github.com/videolan/libvlcsharp/pull/27
* Refactor marshalling logic in generic code
* Fix Unit tests
* RendererDiscoverer: Remove service discovery name inference
* Enable Xamarin Forms gestures on iOS (temporary workaround hopefully) https://github.com/videolan/libvlcsharp/commit/fa455586d1b93ee903fd1e34d49b59b323615754

Martin Finkel's avatar
Martin Finkel committed
309
310
311
312
LibVLCSharp version 0.1.6
=========================
* Fix AWindow reference https://code.videolan.org/videolan/LibVLCSharp/issues/84

Martin Finkel's avatar
Martin Finkel committed
313
314
315
316
317
LibVLCSharp version 0.1.5
=========================
* Handle null login/password dialog marshaling https://code.videolan.org/videolan/LibVLCSharp/issues/75
* Build: Add a way to build all netstandard targets from CLI 
* remove allow unsafe blocks https://code.videolan.org/videolan/LibVLCSharp/merge_requests/6
Martin Finkel's avatar
Martin Finkel committed
318
319
320
* remove nuspec and update csproj https://code.videolan.org/videolan/LibVLCSharp/merge_requests/7:
-> docs: fixes VS Intellisense
-> add better description on nuget.org
Martin Finkel's avatar
Martin Finkel committed
321

Martin Finkel's avatar
Martin Finkel committed
322
323
324
325
326
327
LibVLCSharp version 0.1.4
=========================
* Dialog.Dismiss should be able to be called safely multiple times https://code.videolan.org/videolan/LibVLCSharp/issues/65
* Remove finalizers introduced in 0.1.3, they become a problem when the GC is under pressure https://code.videolan.org/videolan/LibVLCSharp/issues/73
* Rework media callbacks, keep delegate ref and enable iOS support (amongst other things) https://code.videolan.org/videolan/LibVLCSharp/issues/72

Martin Finkel's avatar
Martin Finkel committed
328
329
330
331
332
333
LibVLCSharp version 0.1.3
=========================
* Dialog: Replace cancellation token for existing dialog id https://code.videolan.org/videolan/LibVLCSharp/issues/64
* Add proper IDisposable implementation for all API types https://code.videolan.org/videolan/LibVLCSharp/issues/36
* Core.Initialize() is now safe to call on iOS (does nothing) https://code.videolan.org/videolan/LibVLCSharp/commit/733b5e60000966906abfd5992ed2d676b9bc8253

Martin Finkel's avatar
Martin Finkel committed
334
335
336
337
338
LibVLCSharp version 0.1.2
=========================
* Fix SetVideoTrack wrong interop https://code.videolan.org/videolan/LibVLCSharp/issues/62
* Fix event interop triggering multiple handlers https://code.videolan.org/videolan/LibVLCSharp/issues/44

Martin Finkel's avatar
Martin Finkel committed
339
340
341
342
LibVLCSharp version 0.1.1
=========================
* Add .NET Core macOS and net40 macOS support

Martin Finkel's avatar
Martin Finkel committed
343
344
345
346
347
348
349
LibVLCSharp version 0.1.0
=========================
Public API change: VideoView https://github.com/videolan/libvlcsharp/pull/18
* VideoView supports crossplatform MediaPlayer databinding
* Background playback support: VideoView can be disposed of and the music/video will keep playing.
* Renderer API is simplified: The default service discovery protocol is now inferred https://github.com/videolan/libvlcsharp/commit/10d1c4160e3bda2b156d7385d2be42f410780a20

Martin Finkel's avatar
Martin Finkel committed
350
351
352
353
354
355
356
LibVLCSharp version 0.0.4
=========================
* Remove API version checks https://github.com/videolan/libvlcsharp/commit/335866b0c2b355c0622e65fa690bad665c78c57e
* Add versioning document https://github.com/videolan/libvlcsharp/commit/8566221ee0f0654b63b176c2892d98b455e32c20
* Fix event interop struct layout https://github.com/videolan/libvlcsharp/commit/426bc0dcbe9d2bc7ae1a2a11833765093a8e20d1
* Fix wrong event type https://github.com/videolan/libvlcsharp/commit/2e8b978cea02b83945de564332e81ca65ddf4c99

Martin Finkel's avatar
Martin Finkel committed
357
358
359
360
361
362
363
364
LibVLCSharp version 0.0.3
=========================
* Support for net40 target
* Support for netstandard1.1 target
* Removed [SuppressUnmanagedCodeSecurity] which allowed to remove dependency on System.Runtime.InteropServices.RuntimeInformation
* Custom libvlc library path support
* Added build script folder with powershell script to build and package libvlcsharp

Martin Finkel's avatar
Martin Finkel committed
365
366
367
368
369
LibVLCSharp version 0.0.2
=========================

* Fix media mrl UTF-8 marshaling #30

Martin Finkel's avatar
Martin Finkel committed
370
371
372
373
374
LibVLCSharp version 0.0.1
=========================

* API changes: EventManagers are now encapsulated. Subscribe directly on the objects (Media, MediaPlayer, etc.)
* Clarify error message when libvlc.dll is not found or cannot be loaded.
Martin Finkel's avatar
Martin Finkel committed
375
* Fix iOS native reverse callbacks #15