mirror of
https://github.com/kyleneideck/BackgroundMusic
synced 2024-11-23 04:33:03 +00:00
33b6b17115
The BGMApp project now builds an XPC service bundle called BGMXPCHelper, which vends a Mach service that BGMApp and BGMDriver can use to communicate. This will hopefully be useful for some of the tasks HAL notifications aren't suited to. In this commit, BGMDriver uses the XPC helper when starting IO, to wait until BGMApp is ready for playthrough. BGMApp can only start playthrough when the output hardware is ready for IO. BGMDriver can now tell the HAL when we're ready for IO, which means we don't have to keep the output hardware running all the time (or drop frames or increase latency). The end result is that playthrough doesn't waste CPU time while idle any more. This also means that now playthrough won't prevent the system from sleeping when idle.
61 lines
2.3 KiB
Objective-C
61 lines
2.3 KiB
Objective-C
// This file is part of Background Music.
|
|
//
|
|
// Background Music is free software: you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License as
|
|
// published by the Free Software Foundation, either version 2 of the
|
|
// License, or (at your option) any later version.
|
|
//
|
|
// Background Music is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Background Music. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//
|
|
// BGMXPCProtocols.h
|
|
// SharedSource
|
|
//
|
|
// Copyright © 2016 Kyle Neideck
|
|
//
|
|
|
|
// Local Includes
|
|
#include "BGM_Types.h"
|
|
|
|
// System Includes
|
|
#import <Foundation/Foundation.h>
|
|
|
|
|
|
#pragma clang assume_nonnull begin
|
|
|
|
static NSString* kBGMXPCHelperMachServiceName = @kBGMXPCHelperBundleID;
|
|
|
|
// The protocol that BGMXPCHelper will vend as its XPC API.
|
|
@protocol BGMXPCHelperXPCProtocol
|
|
|
|
// Tells BGMXPCHelper that the caller is BGMApp and passes a listener endpoint that BGMXPCHelper can use to create connections to BGMApp.
|
|
// BGMXPCHelper may also pass the endpoint on to BGMDriver so it can do the same.
|
|
- (void) registerAsBGMAppWithListenerEndpoint:(NSXPCListenerEndpoint*)endpoint reply:(void (^)(void))reply;
|
|
- (void) unregisterAsBGMApp;
|
|
|
|
// BGMDriver calls this remote method when it wants BGMApp to start IO. BGMXPCHelper passes the message along and then passes the response
|
|
// back. This allows BGMDriver to wait for the audio hardware to start up, which means it can let the HAL know when it's safe to start
|
|
// sending us audio data from the client.
|
|
//
|
|
// If BGMApp can be reached, the error it returns will be passed the reply block. Otherwise, the reply block will be passed an error with
|
|
// one of the kBGMXPC_* error codes. It may have an underlying error using one of the NSXPCConnection* error codes from FoundationErrors.h.
|
|
- (void) waitForBGMAppToStartOutputDeviceWithReply:(void (^)(NSError*))reply;
|
|
|
|
@end
|
|
|
|
|
|
// The protocol that BGMApp will vend as its XPC API.
|
|
@protocol BGMAppXPCProtocol
|
|
|
|
- (void) waitForOutputDeviceToStartWithReply:(void (^)(NSError*))reply;
|
|
|
|
@end
|
|
|
|
#pragma clang assume_nonnull end
|
|
|