/* 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 @class HBJob; @class HBPicture; @class HBTitle; @class HBStateFormatter; NS_ASSUME_NONNULL_BEGIN struct HBProgress { double percent; int hours; int minutes; int seconds; }; typedef struct HBProgress HBProgress; // These constants specify the current state of HBCore. typedef NS_ENUM(NSUInteger, HBState) { HBStateIdle = 1, ///< HB is doing nothing HBStateScanning = 2, ///< HB is scanning HBStateScanDone = 4, ///< Scanning has been completed HBStateWorking = 8, ///< HB is encoding HBStatePaused = 16, ///< Encoding is paused HBStateWorkDone = 32, ///< Encoding has been completed HBStateMuxing = 64, ///< HB is muxing HBStateSearching = 128 ///< HB is searching }; // These constants specify the result of a scan or encode. typedef NS_ENUM(NSUInteger, HBCoreResult) { HBCoreResultDone, HBCoreResultCanceled, HBCoreResultFailed, }; typedef void (^HBCoreProgressHandler)(HBState state, HBProgress progress, NSString *info); typedef void (^HBCoreCompletionHandler)(HBCoreResult result); /** * 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. * * Instance methods must be called on the same queue as the queue * passed to initWithLogLevel:queue: * Convenience inits use the main queue by default. * * copyImageAtIndex: can be called on a different queue, * but the caller must ensure the validity of the title. */ @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 level the desired libhb logging level. * @param queue the queue on which the callbacks will be called. */ - (instancetype)initWithLogLevel:(int)level queue:(dispatch_queue_t)queue NS_DESIGNATED_INITIALIZER; /** * Opens low level HandBrake library. This should be called once before other * functions HBCore are used. * * @param level the desired libhb logging level * @param name the instance debug name */ - (instancetype)initWithLogLevel:(int)level name:(NSString *)name; /** * Log level. */ @property (nonatomic, readwrite) int logLevel; /** * Set whether system sleep will be disable or not during a scan/encode * Enabled by default. */ @property (nonatomic, readwrite) BOOL automaticallyPreventSleep; /** * Manually prevent system sleep if automaticallyPreventSleep is set to NO. */ - (void)preventSleep; /** * Manually allow system sleep if automaticallyPreventSleep is set to NO. */ - (void)allowSleep; /** * State formatter. */ @property (nonatomic, readwrite, strong) HBStateFormatter *stateFormatter; /** * 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, copy) 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. */ - (nullable CGImageRef)copyImageAtIndex:(NSUInteger)index forTitle:(HBTitle *)title pictureFrame:(HBPicture *)frame deinterlace:(BOOL)deinterlace rotate:(int)angle flipped:(BOOL)flipped CF_RETURNS_RETAINED; /** * Returns the counts of the available previews images. */ - (NSUInteger)imagesCountForTitle:(HBTitle *)title; /** * 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 NS_ASSUME_NONNULL_END