/* HBCore.h $
This file is part of the HandBrake source code.
Homepage: .
It may be used under the terms of the GNU General Public License. */
#import
#include "hb.h"
@class HBJob;
@class HBPicture;
@class HBTitle;
// These constants specify the current state of HBCore.
typedef NS_ENUM(NSUInteger, HBState) {
HBStateIdle = HB_STATE_IDLE, ///< HB is doing nothing
HBStateScanning = HB_STATE_SCANNING, ///< HB is scanning
HBStateScanDone = HB_STATE_SCANDONE, ///< Scanning has been completed
HBStateWorking = HB_STATE_WORKING, ///< HB is encoding
HBStatePaused = HB_STATE_PAUSED, ///< Encoding is paused
HBStateWorkDone = HB_STATE_WORKDONE, ///< Encoding has been completed
HBStateMuxing = HB_STATE_MUXING, ///< HB is muxing
HBStateSearching = HB_STATE_SEARCHING ///< HB is searching
};
typedef void (^HBCoreProgressHandler)(HBState state, hb_state_t hb_state);
typedef void (^HBCoreCompletionHandler)(BOOL success);
/**
* HBCore is an Objective-C interface to the low-level HandBrake library.
* HBCore monitors state changes of libhb. It can also be used
* to implement properties that can be directly bound to elements of the gui.
*/
@interface HBCore : NSObject
/**
* Set the status of libdvdnav in low level HandBrake library.
* This should be called once before other functions HBCore are used.
*
* @param enabled whether libdvdnav is enabled or not.
*/
+ (void)setDVDNav:(BOOL)enabled;
/**
* Inits libhb globals.
*/
+ (void)initGlobal;
/**
* Performs the final cleanup for the process.
*/
+ (void)closeGlobal;
/**
* Registers a global error handler block.
*
* @param handler a block called with the error message.
*/
+ (void)registerErrorHandler:(void (^)(NSString *error))handler;
/**
* Opens low level HandBrake library. This should be called once before other
* functions HBCore are used.
*
* @param loggingLevel the desired libhb logging level.
*/
- (instancetype)initWithLoggingLevel:(int)loggingLevel;
/**
* Current state of HBCore.
*/
@property (nonatomic, readonly) HBState state;
/**
* The name of the core, used for debugging purpose.
*/
@property (nonatomic, copy) NSString *name;
/**
* Determines whether the scan operation can scan a particural URL or whether an additional decryption lib is needed.
*
* @param url the URL of the input file.
* @param error an error containing additional info.
*
* @return YES is the file at URL is scannable.
*/
- (BOOL)canScan:(NSURL *)url error:(NSError * __autoreleasing *)error;
/**
* Initiates an asynchronous scan operation and returns immediately.
*
* @param url the URL of the input file.
* @param index the index of the desired title. Use 0 to scan every title.
* @param previewsNum the number of previews image to generate.
* @param seconds the minimum duration of the wanted titles in seconds.
* @param progressHandler a block called periodically with the progress information.
* @param completionHandler a block called with the scan result.
*/
- (void)scanURL:(NSURL *)url titleIndex:(NSUInteger)index previews:(NSUInteger)previewsNum minDuration:(NSUInteger)seconds progressHandler:(HBCoreProgressHandler)progressHandler completionHandler:(HBCoreCompletionHandler)completionHandler;
/**
* Cancels the scan execution.
* Cancel can be invoked when the scan is running.
*/
- (void)cancelScan;
/**
* An array of HBTitles found by the latest scan.
*/
@property (nonatomic, readonly) NSArray *titles;
/**
* This function converts an image created by libhb (specified via index)
* into an CGImage.
*
* @param index the index of the desired image.
* @param title Handle to hb_title_t of desired title
* @param frame a HBPicture instance that describe the image's frame.
* @param deinterlace whether the preview image must be deinterlaced or not.
*
* @return a CGImageRef of the wanted image, NULL if the index is out of bounds.
*/
- (CGImageRef)copyImageAtIndex:(NSUInteger)index
forTitle:(HBTitle *)title
pictureFrame:(HBPicture *)frame
deinterlace:(BOOL)deinterlace;
/**
* Initiates an asynchronous encode operation and returns immediately.
*
* @param job the job to encode
* @param progressHandler a block called periodically with the progress information.
* @param completionHandler a block called with the scan result
*/
- (void)encodeJob:(HBJob *)job progressHandler:(HBCoreProgressHandler)progressHandler completionHandler:(HBCoreCompletionHandler)completionHandler;
/**
* Stops encode operation and releases resources.
* Cancel can be invoked when the encode is running.
*/
- (void)cancelEncode;
/**
* Pauses the encode operation.
* Pause can be invoked when the encode is running.
*/
- (void)pause;
/**
* Resumes a paused encoding session.
* Resume can be invoked when the encode is running.
*/
- (void)resume;
@end