Skip to content

Commit

Permalink
Use an events handler in VLCTranscoder
Browse files Browse the repository at this point in the history
  • Loading branch information
umxprime-vlabs committed Jun 14, 2023
1 parent 37a3fc6 commit b2830ab
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions Sources/VLCTranscoder.m
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,14 @@

#import <VLCLibrary.h>
#import <VLCLibVLCBridging.h>

#import <VLCEventsHandler.h>
#include <vlc/vlc.h>

@interface VLCTranscoder()
{
libvlc_media_player_t *_p_mp; //player instance used for transcoding
dispatch_queue_t _libVLCTranscoderQueue;
VLCEventsHandler* _eventsHandler;
}
- (void)registerObserversForMuxWithPlayer:(libvlc_media_player_t *)player;
- (void)unregisterObserversForMuxWithPlayer:(libvlc_media_player_t *)player;
Expand Down Expand Up @@ -79,14 +80,14 @@ - (void)registerObserversForMuxWithPlayer:(libvlc_media_player_t *)player
__block libvlc_event_manager_t * p_em = libvlc_media_player_event_manager(player);
if (!p_em)
return;
CFBridgingRetain(self);
_eventsHandler = [VLCEventsHandler handlerWithObject:self configuration:[VLCLibrary sharedEventsConfiguration]];
dispatch_sync(_libVLCTranscoderQueue,^{
libvlc_event_attach(p_em, libvlc_MediaPlayerPaused,
HandleMuxMediaInstanceStateChanged, (__bridge void *)(self));
HandleMuxMediaInstanceStateChanged, (__bridge void *)(_eventsHandler));
libvlc_event_attach(p_em, libvlc_MediaPlayerStopped,
HandleMuxMediaInstanceStateChanged, (__bridge void *)(self));
HandleMuxMediaInstanceStateChanged, (__bridge void *)(_eventsHandler));
libvlc_event_attach(p_em, libvlc_MediaPlayerEncounteredError,
HandleMuxMediaInstanceStateChanged, (__bridge void *)(self));
HandleMuxMediaInstanceStateChanged, (__bridge void *)(_eventsHandler));
});
}

Expand All @@ -97,13 +98,12 @@ - (void)unregisterObserversForMuxWithPlayer:(libvlc_media_player_t *)player
return;
dispatch_sync(_libVLCTranscoderQueue,^{
libvlc_event_detach(p_em, libvlc_MediaPlayerStopped,
HandleMuxMediaInstanceStateChanged, (__bridge void *)(self));
HandleMuxMediaInstanceStateChanged, (__bridge void *)(_eventsHandler));
libvlc_event_detach(p_em, libvlc_MediaPlayerPaused,
HandleMuxMediaInstanceStateChanged, (__bridge void *)(self));
HandleMuxMediaInstanceStateChanged, (__bridge void *)(_eventsHandler));
libvlc_event_detach(p_em, libvlc_MediaPlayerEncounteredError,
HandleMuxMediaInstanceStateChanged, (__bridge void *)(self));
HandleMuxMediaInstanceStateChanged, (__bridge void *)(_eventsHandler));
});
CFBridgingRelease((__bridge CFTypeRef _Nullable)(self));
}

- (void)mediaPlayerStateChangeForMux:(const VLCMediaPlayerState)newState
Expand All @@ -117,7 +117,7 @@ - (void)mediaPlayerStateChangeForMux:(const VLCMediaPlayerState)newState
}
}

static void HandleMuxMediaInstanceStateChanged(const libvlc_event_t * event, void * self)
static void HandleMuxMediaInstanceStateChanged(const libvlc_event_t * event, void * opaque)
{
VLCMediaPlayerState newState;
if (event->type == libvlc_MediaPlayerPaused) {
Expand All @@ -128,10 +128,11 @@ static void HandleMuxMediaInstanceStateChanged(const libvlc_event_t * event, voi
newState = VLCMediaPlayerStateError;
}
@autoreleasepool {
VLCTranscoder *transcoder = (__bridge VLCTranscoder *)self;
dispatch_async(dispatch_get_main_queue(), ^{
VLCEventsHandler *eventsHandler = (__bridge VLCEventsHandler*)opaque;
[eventsHandler handleEvent:^(id _Nonnull object) {
VLCTranscoder *transcoder = (VLCTranscoder *)object;
[transcoder mediaPlayerStateChangeForMux: newState];
});
}];
}
}

Expand Down

0 comments on commit b2830ab

Please sign in to comment.