Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
miniaudio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
miniaudio
Commits
b6f72e22
"...Irrlicht/svn:/svn.code.sf.net/p/irrlicht/code/trunk@2068" did not exist on "38677f72047b2ee56f69bccde25c0b7c9f200378"
Commit
b6f72e22
authored
Mar 05, 2018
by
David Reid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
JACK: Remove dependency on jack.h
parent
70268bc3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
95 additions
and
48 deletions
+95
-48
mini_al.h
mini_al.h
+95
-48
No files found.
mini_al.h
View file @
b6f72e22
...
...
@@ -1181,7 +1181,7 @@ struct mal_device
#ifdef MAL_SUPPORT_JACK
struct
{
/*jack_client_t**/
mal_ptr
p
Jack
Client
;
/*jack_client_t**/
mal_ptr
pClient
;
/*jack_port_t**/
mal_ptr
pPorts
[
MAL_MAX_CHANNELS
];
float
*
pIntermediaryBuffer
;
// Typed as a float because JACK is always floating point.
}
jack
;
...
...
@@ -8229,31 +8229,74 @@ static mal_result mal_device__main_loop__pulse(mal_device* pDevice)
//
///////////////////////////////////////////////////////////////////////////////
#ifdef MAL_HAS_JACK
// It is assumed jack.h is available when compile-time linking is being used.
#ifdef MAL_NO_RUNTIME_LINKING
#include <jack/jack.h>
#endif
typedef
jack_client_t
*
(
*
mal_jack_client_open_proc
)
(
const
char
*
client_name
,
jack_options_t
options
,
jack_status_t
*
status
,
...);
typedef
int
(
*
mal_jack_client_close_proc
)
(
jack_client_t
*
client
);
typedef
int
(
*
mal_jack_client_name_size_proc
)
();
typedef
int
(
*
mal_jack_set_process_callback_proc
)
(
jack_client_t
*
client
,
JackProcessCallback
process_callback
,
void
*
arg
);
typedef
int
(
*
mal_jack_set_buffer_size_callback_proc
)(
jack_client_t
*
client
,
JackBufferSizeCallback
bufsize_callback
,
void
*
arg
);
typedef
void
(
*
mal_jack_on_shutdown_proc
)
(
jack_client_t
*
client
,
JackShutdownCallback
function
,
void
*
arg
);
typedef
jack_nframes_t
(
*
mal_jack_get_sample_rate_proc
)
(
jack_client_t
*
client
);
typedef
jack_nframes_t
(
*
mal_jack_get_buffer_size_proc
)
(
jack_client_t
*
client
);
typedef
const
char
**
(
*
mal_jack_get_ports_proc
)
(
jack_client_t
*
client
,
const
char
*
port_name_pattern
,
const
char
*
type_name_pattern
,
unsigned
long
flags
);
typedef
int
(
*
mal_jack_activate_proc
)
(
jack_client_t
*
client
);
typedef
int
(
*
mal_jack_deactivate_proc
)
(
jack_client_t
*
client
);
typedef
int
(
*
mal_jack_connect_proc
)
(
jack_client_t
*
client
,
const
char
*
source_port
,
const
char
*
destination_port
);
typedef
jack_port_t
*
(
*
mal_jack_port_register_proc
)
(
jack_client_t
*
client
,
const
char
*
port_name
,
const
char
*
port_type
,
unsigned
long
flags
,
unsigned
long
buffer_size
);
typedef
const
char
*
(
*
mal_jack_port_name_proc
)
(
const
jack_port_t
*
port
);
typedef
void
*
(
*
mal_jack_port_get_buffer_proc
)
(
jack_port_t
*
port
,
jack_nframes_t
nframes
);
typedef
void
(
*
mal_jack_free_proc
)
(
void
*
ptr
);
#ifdef MAL_NO_RUNTIME_LINKING
typedef
jack_nframes_t
mal_jack_nframes_t
;
typedef
jack_options_t
mal_jack_options_t
;
typedef
jack_status_t
mal_jack_status_t
;
typedef
jack_client_t
mal_jack_client_t
;
typedef
jack_port_t
mal_jack_port_t
;
typedef
JackProcessCallback
mal_JackProcessCallback
;
typedef
JackBufferSizeCallback
mal_JackBufferSizeCallback
;
typedef
JackShutdownCallback
mal_JackShutdownCallback
;
#define MAL_JACK_DEFAULT_AUDIO_TYPE JACK_DEFAULT_AUDIO_TYPE
#define mal_JackNoStartServer JackNoStartServer
#define mal_JackPortIsInput JackPortIsInput
#define mal_JackPortIsOutput JackPortIsOutput
#define mal_JackPortIsPhysical JackPortIsPhysical
#else
typedef
mal_uint32
mal_jack_nframes_t
;
typedef
int
mal_jack_options_t
;
typedef
int
mal_jack_status_t
;
typedef
struct
{
int
__unused
;
}
mal_jack_client_t
;
typedef
struct
{
int
__unused
;
}
mal_jack_port_t
;
typedef
int
(
*
mal_JackProcessCallback
)
(
mal_jack_nframes_t
nframes
,
void
*
arg
);
typedef
int
(
*
mal_JackBufferSizeCallback
)(
mal_jack_nframes_t
nframes
,
void
*
arg
);
typedef
void
(
*
mal_JackShutdownCallback
)
(
void
*
arg
);
#define MAL_JACK_DEFAULT_AUDIO_TYPE "32 bit float mono audio"
#define mal_JackNoStartServer 1
#define mal_JackPortIsInput 1
#define mal_JackPortIsOutput 2
#define mal_JackPortIsPhysical 4
#endif
typedef
mal_jack_client_t
*
(
*
mal_jack_client_open_proc
)
(
const
char
*
client_name
,
mal_jack_options_t
options
,
mal_jack_status_t
*
status
,
...);
typedef
int
(
*
mal_jack_client_close_proc
)
(
mal_jack_client_t
*
client
);
typedef
int
(
*
mal_jack_client_name_size_proc
)
();
typedef
int
(
*
mal_jack_set_process_callback_proc
)
(
mal_jack_client_t
*
client
,
mal_JackProcessCallback
process_callback
,
void
*
arg
);
typedef
int
(
*
mal_jack_set_buffer_size_callback_proc
)(
mal_jack_client_t
*
client
,
mal_JackBufferSizeCallback
bufsize_callback
,
void
*
arg
);
typedef
void
(
*
mal_jack_on_shutdown_proc
)
(
mal_jack_client_t
*
client
,
mal_JackShutdownCallback
function
,
void
*
arg
);
typedef
mal_jack_nframes_t
(
*
mal_jack_get_sample_rate_proc
)
(
mal_jack_client_t
*
client
);
typedef
mal_jack_nframes_t
(
*
mal_jack_get_buffer_size_proc
)
(
mal_jack_client_t
*
client
);
typedef
const
char
**
(
*
mal_jack_get_ports_proc
)
(
mal_jack_client_t
*
client
,
const
char
*
port_name_pattern
,
const
char
*
type_name_pattern
,
unsigned
long
flags
);
typedef
int
(
*
mal_jack_activate_proc
)
(
mal_jack_client_t
*
client
);
typedef
int
(
*
mal_jack_deactivate_proc
)
(
mal_jack_client_t
*
client
);
typedef
int
(
*
mal_jack_connect_proc
)
(
mal_jack_client_t
*
client
,
const
char
*
source_port
,
const
char
*
destination_port
);
typedef
mal_jack_port_t
*
(
*
mal_jack_port_register_proc
)
(
mal_jack_client_t
*
client
,
const
char
*
port_name
,
const
char
*
port_type
,
unsigned
long
flags
,
unsigned
long
buffer_size
);
typedef
const
char
*
(
*
mal_jack_port_name_proc
)
(
const
mal_jack_port_t
*
port
);
typedef
void
*
(
*
mal_jack_port_get_buffer_proc
)
(
mal_jack_port_t
*
port
,
mal_jack_nframes_t
nframes
);
typedef
void
(
*
mal_jack_free_proc
)
(
void
*
ptr
);
static
mal_result
mal_context_uninit__jack
(
mal_context
*
pContext
)
{
mal_assert
(
pContext
!=
NULL
);
mal_assert
(
pContext
->
backend
==
mal_backend_jack
);
#ifndef MAL_NO_RUNTIME_LINKING
mal_dlclose
(
pContext
->
jack
.
jackSO
);
#endif
return
MAL_SUCCESS
;
}
...
...
@@ -8264,8 +8307,12 @@ static mal_result mal_context_init__jack(mal_context* pContext)
#ifndef MAL_NO_RUNTIME_LINKING
// libjack.so
const
char
*
libjackNames
[]
=
{
#ifdef MAL_WIN32
"libjack.dll"
#else
"libjack.so"
,
"libjack.so.0"
#endif
};
for
(
size_t
i
=
0
;
i
<
mal_countof
(
libjackNames
);
++
i
)
{
...
...
@@ -8371,8 +8418,8 @@ void mal_device_uninit__jack(mal_device* pDevice)
mal_context
*
pContext
=
pDevice
->
pContext
;
mal_assert
(
pContext
!=
NULL
);
if
(
pDevice
->
jack
.
p
Jack
Client
!=
NULL
)
{
((
mal_jack_client_close_proc
)
pContext
->
jack
.
jack_client_close
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
);
if
(
pDevice
->
jack
.
pClient
!=
NULL
)
{
((
mal_jack_client_close_proc
)
pContext
->
jack
.
jack_client_close
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
);
}
}
...
...
@@ -8385,7 +8432,7 @@ void mal_device__jack_shutdown_callback(void* pUserData)
mal_device_stop
(
pDevice
);
}
int
mal_device__jack_buffer_size_callback
(
jack_nframes_t
frameCount
,
void
*
pUserData
)
int
mal_device__jack_buffer_size_callback
(
mal_
jack_nframes_t
frameCount
,
void
*
pUserData
)
{
mal_device
*
pDevice
=
(
mal_device
*
)
pUserData
;
mal_assert
(
pDevice
!=
NULL
);
...
...
@@ -8404,7 +8451,7 @@ int mal_device__jack_buffer_size_callback(jack_nframes_t frameCount, void* pUser
return
0
;
}
int
mal_device__jack_process_callback
(
jack_nframes_t
frameCount
,
void
*
pUserData
)
int
mal_device__jack_process_callback
(
mal_
jack_nframes_t
frameCount
,
void
*
pUserData
)
{
mal_device
*
pDevice
=
(
mal_device
*
)
pUserData
;
mal_assert
(
pDevice
!=
NULL
);
...
...
@@ -8417,10 +8464,10 @@ int mal_device__jack_process_callback(jack_nframes_t frameCount, void* pUserData
// Channels need to be separated.
for
(
mal_uint32
iChannel
=
0
;
iChannel
<
pDevice
->
internalChannels
;
++
iChannel
)
{
float
*
pDst
=
(
float
*
)((
mal_jack_port_get_buffer_proc
)
pContext
->
jack
.
jack_port_get_buffer
)((
jack_port_t
*
)
pDevice
->
jack
.
pPorts
[
iChannel
],
frameCount
);
float
*
pDst
=
(
float
*
)((
mal_jack_port_get_buffer_proc
)
pContext
->
jack
.
jack_port_get_buffer
)((
mal_
jack_port_t
*
)
pDevice
->
jack
.
pPorts
[
iChannel
],
frameCount
);
if
(
pDst
!=
NULL
)
{
const
float
*
pSrc
=
pDevice
->
jack
.
pIntermediaryBuffer
+
iChannel
;
for
(
jack_nframes_t
iFrame
=
0
;
iFrame
<
frameCount
;
++
iFrame
)
{
for
(
mal_
jack_nframes_t
iFrame
=
0
;
iFrame
<
frameCount
;
++
iFrame
)
{
*
pDst
=
*
pSrc
;
pDst
+=
1
;
...
...
@@ -8431,10 +8478,10 @@ int mal_device__jack_process_callback(jack_nframes_t frameCount, void* pUserData
}
else
{
// Channels need to be interleaved.
for
(
mal_uint32
iChannel
=
0
;
iChannel
<
pDevice
->
internalChannels
;
++
iChannel
)
{
const
float
*
pSrc
=
(
const
float
*
)((
mal_jack_port_get_buffer_proc
)
pContext
->
jack
.
jack_port_get_buffer
)((
jack_port_t
*
)
pDevice
->
jack
.
pPorts
[
iChannel
],
frameCount
);
const
float
*
pSrc
=
(
const
float
*
)((
mal_jack_port_get_buffer_proc
)
pContext
->
jack
.
jack_port_get_buffer
)((
mal_
jack_port_t
*
)
pDevice
->
jack
.
pPorts
[
iChannel
],
frameCount
);
if
(
pSrc
!=
NULL
)
{
float
*
pDst
=
pDevice
->
jack
.
pIntermediaryBuffer
+
iChannel
;
for
(
jack_nframes_t
iFrame
=
0
;
iFrame
<
frameCount
;
++
iFrame
)
{
for
(
mal_
jack_nframes_t
iFrame
=
0
;
iFrame
<
frameCount
;
++
iFrame
)
{
*
pDst
=
*
pSrc
;
pDst
+=
pDevice
->
internalChannels
;
...
...
@@ -8463,21 +8510,21 @@ mal_result mal_device_init__jack(mal_context* pContext, mal_device_type type, ma
char
clientName
[
256
];
mal_strncpy_s
(
clientName
,
mal_min
(
sizeof
(
clientName
),
maxClientNameSize
),
(
pContext
->
config
.
jack
.
pClientName
!=
NULL
)
?
pContext
->
config
.
jack
.
pClientName
:
"mini_al"
,
(
size_t
)
-
1
);
jack_status_t
status
;
pDevice
->
jack
.
p
JackClient
=
((
mal_jack_client_open_proc
)
pContext
->
jack
.
jack_client_open
)(
clientName
,
(
pContext
->
config
.
jack
.
tryStartServer
)
?
0
:
JackNoStartServer
,
&
status
,
NULL
);
if
(
pDevice
->
jack
.
p
Jack
Client
==
NULL
)
{
mal_
jack_status_t
status
;
pDevice
->
jack
.
p
Client
=
((
mal_jack_client_open_proc
)
pContext
->
jack
.
jack_client_open
)(
clientName
,
(
pContext
->
config
.
jack
.
tryStartServer
)
?
0
:
mal_
JackNoStartServer
,
&
status
,
NULL
);
if
(
pDevice
->
jack
.
pClient
==
NULL
)
{
return
mal_post_error
(
pDevice
,
"[JACK] Failed to open client."
,
MAL_FAILED_TO_OPEN_BACKEND_DEVICE
);
}
// Callbacks.
if
(((
mal_jack_set_process_callback_proc
)
pContext
->
jack
.
jack_set_process_callback
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
,
mal_device__jack_process_callback
,
pDevice
)
!=
0
)
{
if
(((
mal_jack_set_process_callback_proc
)
pContext
->
jack
.
jack_set_process_callback
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
,
mal_device__jack_process_callback
,
pDevice
)
!=
0
)
{
return
mal_post_error
(
pDevice
,
"[JACK] Failed to set process callback."
,
MAL_FAILED_TO_OPEN_BACKEND_DEVICE
);
}
if
(((
mal_jack_set_buffer_size_callback_proc
)
pContext
->
jack
.
jack_set_buffer_size_callback
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
,
mal_device__jack_buffer_size_callback
,
pDevice
)
!=
0
)
{
if
(((
mal_jack_set_buffer_size_callback_proc
)
pContext
->
jack
.
jack_set_buffer_size_callback
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
,
mal_device__jack_buffer_size_callback
,
pDevice
)
!=
0
)
{
return
mal_post_error
(
pDevice
,
"[JACK] Failed to set buffer size callback."
,
MAL_FAILED_TO_OPEN_BACKEND_DEVICE
);
}
((
mal_jack_on_shutdown_proc
)
pContext
->
jack
.
jack_on_shutdown
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
,
mal_device__jack_shutdown_callback
,
pDevice
);
((
mal_jack_on_shutdown_proc
)
pContext
->
jack
.
jack_on_shutdown
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
,
mal_device__jack_shutdown_callback
,
pDevice
);
// The format is always f32.
...
...
@@ -8487,14 +8534,14 @@ mal_result mal_device_init__jack(mal_context* pContext, mal_device_type type, ma
unsigned
long
serverPortFlags
;
unsigned
long
clientPortFlags
;
if
(
type
==
mal_device_type_playback
)
{
serverPortFlags
=
JackPortIsInput
;
clientPortFlags
=
JackPortIsOutput
;
serverPortFlags
=
mal_
JackPortIsInput
;
clientPortFlags
=
mal_
JackPortIsOutput
;
}
else
{
serverPortFlags
=
JackPortIsOutput
;
clientPortFlags
=
JackPortIsInput
;
serverPortFlags
=
mal_
JackPortIsOutput
;
clientPortFlags
=
mal_
JackPortIsInput
;
}
const
char
**
ppPorts
=
((
mal_jack_get_ports_proc
)
pContext
->
jack
.
jack_get_ports
)((
jack_client_t
*
)
pDevice
->
jack
.
pJackClient
,
NULL
,
NULL
,
JackPortIsPhysical
|
serverPortFlags
);
const
char
**
ppPorts
=
((
mal_jack_get_ports_proc
)
pContext
->
jack
.
jack_get_ports
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
pClient
,
NULL
,
NULL
,
mal_
JackPortIsPhysical
|
serverPortFlags
);
if
(
ppPorts
==
NULL
)
{
return
mal_post_error
(
pDevice
,
"[JACK] Failed to query physical ports."
,
MAL_FAILED_TO_OPEN_BACKEND_DEVICE
);
}
...
...
@@ -8510,7 +8557,7 @@ mal_result mal_device_init__jack(mal_context* pContext, mal_device_type type, ma
mal_itoa_s
((
int
)
pDevice
->
internalChannels
,
name
+
7
,
sizeof
(
name
)
-
7
,
10
);
// 7 = length of "capture"
}
pDevice
->
jack
.
pPorts
[
pDevice
->
internalChannels
]
=
((
mal_jack_port_register_proc
)
pContext
->
jack
.
jack_port_register
)((
jack_client_t
*
)
pDevice
->
jack
.
pJackClient
,
name
,
JACK_DEFAULT_AUDIO_TYPE
,
clientPortFlags
,
0
);
pDevice
->
jack
.
pPorts
[
pDevice
->
internalChannels
]
=
((
mal_jack_port_register_proc
)
pContext
->
jack
.
jack_port_register
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
pClient
,
name
,
MAL_
JACK_DEFAULT_AUDIO_TYPE
,
clientPortFlags
,
0
);
if
(
pDevice
->
jack
.
pPorts
[
pDevice
->
internalChannels
]
==
NULL
)
{
((
mal_jack_free_proc
)
pContext
->
jack
.
jack_free
)(
ppPorts
);
mal_device_uninit__jack
(
pDevice
);
...
...
@@ -8524,14 +8571,14 @@ mal_result mal_device_init__jack(mal_context* pContext, mal_device_type type, ma
ppPorts
=
NULL
;
// We set the sample rate here, but apparently this can change. This is incompatible with mini_al, so changing sample rates will not be supported.
pDevice
->
internalSampleRate
=
((
mal_jack_get_sample_rate_proc
)
pContext
->
jack
.
jack_get_sample_rate
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
);
pDevice
->
internalSampleRate
=
((
mal_jack_get_sample_rate_proc
)
pContext
->
jack
.
jack_get_sample_rate
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
);
// I don't think the channel map can be queried, so just use defaults for now.
mal_get_default_channel_mapping
(
pDevice
->
pContext
->
backend
,
pDevice
->
internalChannels
,
pDevice
->
internalChannelMap
);
// The buffer size in frames can change.
pDevice
->
periods
=
2
;
pDevice
->
bufferSizeInFrames
=
((
mal_jack_get_buffer_size_proc
)
pContext
->
jack
.
jack_get_buffer_size
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
)
*
pDevice
->
periods
;
pDevice
->
bufferSizeInFrames
=
((
mal_jack_get_buffer_size_proc
)
pContext
->
jack
.
jack_get_buffer_size
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
)
*
pDevice
->
periods
;
// Initial allocation for the intermediary buffer.
pDevice
->
jack
.
pIntermediaryBuffer
=
(
float
*
)
mal_malloc
((
pDevice
->
bufferSizeInFrames
/
pDevice
->
periods
)
*
(
pDevice
->
internalChannels
*
mal_get_sample_size_in_bytes
(
pDevice
->
internalFormat
)));
...
...
@@ -8551,20 +8598,20 @@ static mal_result mal_device__start_backend__jack(mal_device* pDevice)
mal_context
*
pContext
=
pDevice
->
pContext
;
mal_assert
(
pContext
!=
NULL
);
int
resultJACK
=
((
mal_jack_activate_proc
)
pContext
->
jack
.
jack_activate
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
);
int
resultJACK
=
((
mal_jack_activate_proc
)
pContext
->
jack
.
jack_activate
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
);
if
(
resultJACK
!=
0
)
{
return
mal_post_error
(
pDevice
,
"[JACK] Failed to activate the JACK client."
,
MAL_FAILED_TO_START_BACKEND_DEVICE
);
}
const
char
**
ppServerPorts
;
if
(
pDevice
->
type
==
mal_device_type_playback
)
{
ppServerPorts
=
((
mal_jack_get_ports_proc
)
pContext
->
jack
.
jack_get_ports
)((
jack_client_t
*
)
pDevice
->
jack
.
pJackClient
,
NULL
,
NULL
,
JackPortIsPhysical
|
JackPortIsInput
);
ppServerPorts
=
((
mal_jack_get_ports_proc
)
pContext
->
jack
.
jack_get_ports
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
pClient
,
NULL
,
NULL
,
mal_JackPortIsPhysical
|
mal_
JackPortIsInput
);
}
else
{
ppServerPorts
=
((
mal_jack_get_ports_proc
)
pContext
->
jack
.
jack_get_ports
)((
jack_client_t
*
)
pDevice
->
jack
.
pJackClient
,
NULL
,
NULL
,
JackPortIsPhysical
|
JackPortIsOutput
);
ppServerPorts
=
((
mal_jack_get_ports_proc
)
pContext
->
jack
.
jack_get_ports
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
pClient
,
NULL
,
NULL
,
mal_JackPortIsPhysical
|
mal_
JackPortIsOutput
);
}
if
(
ppServerPorts
==
NULL
)
{
((
mal_jack_deactivate_proc
)
pContext
->
jack
.
jack_deactivate
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
);
((
mal_jack_deactivate_proc
)
pContext
->
jack
.
jack_deactivate
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
);
return
mal_post_error
(
pDevice
,
"[JACK] Failed to retrieve physical ports."
,
MAL_ERROR
);
}
...
...
@@ -8572,18 +8619,18 @@ static mal_result mal_device__start_backend__jack(mal_device* pDevice)
const
char
*
pServerPort
=
ppServerPorts
[
i
];
mal_assert
(
pServerPort
!=
NULL
);
const
char
*
pClientPort
=
((
mal_jack_port_name_proc
)
pContext
->
jack
.
jack_port_name
)((
jack_port_t
*
)
pDevice
->
jack
.
pPorts
[
i
]);
const
char
*
pClientPort
=
((
mal_jack_port_name_proc
)
pContext
->
jack
.
jack_port_name
)((
mal_
jack_port_t
*
)
pDevice
->
jack
.
pPorts
[
i
]);
mal_assert
(
pClientPort
!=
NULL
);
if
(
pDevice
->
type
==
mal_device_type_playback
)
{
resultJACK
=
((
mal_jack_connect_proc
)
pContext
->
jack
.
jack_connect
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
,
pClientPort
,
pServerPort
);
resultJACK
=
((
mal_jack_connect_proc
)
pContext
->
jack
.
jack_connect
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
,
pClientPort
,
pServerPort
);
}
else
{
resultJACK
=
((
mal_jack_connect_proc
)
pContext
->
jack
.
jack_connect
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
,
pServerPort
,
pClientPort
);
resultJACK
=
((
mal_jack_connect_proc
)
pContext
->
jack
.
jack_connect
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
,
pServerPort
,
pClientPort
);
}
if
(
resultJACK
!=
0
)
{
((
mal_jack_free_proc
)
pContext
->
jack
.
jack_free
)(
ppServerPorts
);
((
mal_jack_deactivate_proc
)
pContext
->
jack
.
jack_deactivate
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
);
((
mal_jack_deactivate_proc
)
pContext
->
jack
.
jack_deactivate
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
);
return
mal_post_error
(
pDevice
,
"[JACK] Failed to connect ports."
,
MAL_ERROR
);
}
}
...
...
@@ -8600,7 +8647,7 @@ static mal_result mal_device__stop_backend__jack(mal_device* pDevice)
mal_context
*
pContext
=
pDevice
->
pContext
;
mal_assert
(
pContext
!=
NULL
);
if
(((
mal_jack_deactivate_proc
)
pContext
->
jack
.
jack_deactivate
)((
jack_client_t
*
)
pDevice
->
jack
.
pJack
Client
)
!=
0
)
{
if
(((
mal_jack_deactivate_proc
)
pContext
->
jack
.
jack_deactivate
)((
mal_jack_client_t
*
)
pDevice
->
jack
.
p
Client
)
!=
0
)
{
return
mal_post_error
(
pDevice
,
"[JACK] An error occurred when deactivating the JACK client."
,
MAL_ERROR
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment