summaryrefslogtreecommitdiffstats
path: root/macosx/HBPreviewGenerator.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/HBPreviewGenerator.m')
-rw-r--r--macosx/HBPreviewGenerator.m94
1 files changed, 40 insertions, 54 deletions
diff --git a/macosx/HBPreviewGenerator.m b/macosx/HBPreviewGenerator.m
index 51c0fd125..88ad2c320 100644
--- a/macosx/HBPreviewGenerator.m
+++ b/macosx/HBPreviewGenerator.m
@@ -27,8 +27,6 @@ typedef enum EncodeState : NSUInteger {
@property (nonatomic, readonly) HBJob *job;
@property (nonatomic) HBCore *core;
-@property (nonatomic, getter=isCancelled) BOOL cancelled;
-
@property (nonatomic, retain) NSURL *fileURL;
@@ -243,64 +241,43 @@ typedef enum EncodeState : NSUInteger {
int loggingLevel = [[[NSUserDefaults standardUserDefaults] objectForKey:@"LoggingLevel"] intValue];
self.core = [[[HBCore alloc] initWithLoggingLevel:loggingLevel] autorelease];
self.core.name = @"PreviewCore";
- [self registerCoreNotifications];
// lets go ahead and send it off to libhb
hb_add(self.core.hb_handle, job);
hb_job_close(&job);
// start the actual encode
- [self.core start];
-
- return YES;
-}
-
-/**
- * Cancels the encoding process
- */
-- (void) cancel
-{
- if (self.core.state == HBStateWorking || self.core.state == HBStatePaused)
- {
- [self.core stop];
- self.cancelled = YES;
- }
-}
-
-/**
- * Registers for notifications from HBCore.
- */
-- (void) registerCoreNotifications
-{
- NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
-
- [[NSNotificationCenter defaultCenter] addObserverForName:HBCoreWorkingNotification object:self.core queue:mainQueue usingBlock:^(NSNotification *note) {
- hb_state_t s = *(self.core.hb_state);
-
- NSMutableString *info = [NSMutableString stringWithFormat: @"Encoding preview: %.2f %%", 100.0 * s.param.working.progress];
+ [self.core startProgressHandler:^(HBState state, hb_state_t hb_state) {
+ switch (state) {
+ case HBStateWorking:
+ {
+ NSMutableString *info = [NSMutableString stringWithFormat: @"Encoding preview: %.2f %%", 100.0 * hb_state.param.working.progress];
+
+ if (hb_state.param.working.seconds > -1)
+ {
+ [info appendFormat:@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
+ hb_state.param.working.rate_cur, hb_state.param.working.rate_avg, hb_state.param.working.hours,
+ hb_state.param.working.minutes, hb_state.param.working.seconds];
+ }
+
+ double progress = 100.0 * hb_state.param.working.progress;
+
+ [self.delegate updateProgress:progress info:info];
+ break;
+ }
+ case HBStateMuxing:
+ [self.delegate updateProgress:100.0 info:@"Muxing Preview…"];
+ break;
- if (s.param.working.seconds > -1)
- {
- [info appendFormat:@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
- s.param.working.rate_cur, s.param.working.rate_avg, s.param.working.hours,
- s.param.working.minutes, s.param.working.seconds];
+ default:
+ break;
}
-
- double progress = 100.0 * s.param.working.progress;
-
- [self.delegate updateProgress:progress info:info];
- }];
-
- [[NSNotificationCenter defaultCenter] addObserverForName:HBCoreMuxingNotification object:self.core queue:mainQueue usingBlock:^(NSNotification *note) {
- [self.delegate updateProgress:100.0 info:@"Muxing Preview…"];
- }];
-
- [[NSNotificationCenter defaultCenter] addObserverForName:HBCoreWorkDoneNotification object:self.core queue:mainQueue usingBlock:^(NSNotification *note) {
- [self.core stop];
+ }
+ completationHandler:^(BOOL success) {
self.core = nil;
- /* Encode done, call the delegate and close libhb handle */
- if (!self.isCancelled)
+ // Encode done, call the delegate and close libhb handle
+ if (success)
{
[self.delegate didCreateMovieAtURL:self.fileURL];
}
@@ -308,18 +285,27 @@ typedef enum EncodeState : NSUInteger {
{
[self.delegate didCancelMovieCreation];
}
+ }];
- self.cancelled = NO;
+ return YES;
+}
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }];
+/**
+ * Cancels the encoding process
+ */
+- (void) cancel
+{
+ if (self.core.state == HBStateWorking || self.core.state == HBStatePaused)
+ {
+ [self.core cancelEncode];
+ }
}
#pragma mark -
- (void) dealloc
{
- [self.core stop];
+ [self.core cancelEncode];
[_core release];
_core = nil;