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
c8ae6f6a
Commit
c8ae6f6a
authored
Mar 03, 2018
by
David Reid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pulse: Use an equivalent cmap as the one requested when initializing.
parent
00eec752
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
19 deletions
+65
-19
mini_al.h
mini_al.h
+65
-19
No files found.
mini_al.h
View file @
c8ae6f6a
...
@@ -6921,7 +6921,6 @@ static mal_result mal_device__main_loop__alsa(mal_device* pDevice)
...
@@ -6921,7 +6921,6 @@ static mal_result mal_device__main_loop__alsa(mal_device* pDevice)
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#ifdef MAL_HAS_PULSEAUDIO
#ifdef MAL_HAS_PULSEAUDIO
#include <pulse/pulseaudio.h>
#include <pulse/pulseaudio.h>
#include <pulse/simple.h>
#include <pulse/error.h>
#include <pulse/error.h>
typedef
struct
typedef
struct
...
@@ -6982,7 +6981,7 @@ static mal_format mal_format_from_pulse(pa_sample_format_t format)
...
@@ -6982,7 +6981,7 @@ static mal_format mal_format_from_pulse(pa_sample_format_t format)
}
}
}
}
static
mal_channel
mal_channel_position_from_pulse
(
enum
pa_channel_position
position
)
static
mal_channel
mal_channel_position_from_pulse
(
pa_channel_position_t
position
)
{
{
switch
(
position
)
switch
(
position
)
{
{
...
@@ -7017,20 +7016,20 @@ static mal_channel mal_channel_position_from_pulse(enum pa_channel_position posi
...
@@ -7017,20 +7016,20 @@ static mal_channel mal_channel_position_from_pulse(enum pa_channel_position posi
case
PA_CHANNEL_POSITION_AUX15
:
return
MAL_CHANNEL_NONE
;
case
PA_CHANNEL_POSITION_AUX15
:
return
MAL_CHANNEL_NONE
;
case
PA_CHANNEL_POSITION_AUX16
:
return
MAL_CHANNEL_NONE
;
case
PA_CHANNEL_POSITION_AUX16
:
return
MAL_CHANNEL_NONE
;
case
PA_CHANNEL_POSITION_AUX17
:
return
MAL_CHANNEL_NONE
;
case
PA_CHANNEL_POSITION_AUX17
:
return
MAL_CHANNEL_NONE
;
case
PA_CHANNEL_POSITION_AUX18
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX18
:
return
MAL_CHANNEL_
19
;
case
PA_CHANNEL_POSITION_AUX19
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX19
:
return
MAL_CHANNEL_
20
;
case
PA_CHANNEL_POSITION_AUX20
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX20
:
return
MAL_CHANNEL_
21
;
case
PA_CHANNEL_POSITION_AUX21
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX21
:
return
MAL_CHANNEL_
22
;
case
PA_CHANNEL_POSITION_AUX22
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX22
:
return
MAL_CHANNEL_
23
;
case
PA_CHANNEL_POSITION_AUX23
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX23
:
return
MAL_CHANNEL_
24
;
case
PA_CHANNEL_POSITION_AUX24
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX24
:
return
MAL_CHANNEL_
25
;
case
PA_CHANNEL_POSITION_AUX25
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX25
:
return
MAL_CHANNEL_
26
;
case
PA_CHANNEL_POSITION_AUX26
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX26
:
return
MAL_CHANNEL_
27
;
case
PA_CHANNEL_POSITION_AUX27
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX27
:
return
MAL_CHANNEL_
28
;
case
PA_CHANNEL_POSITION_AUX28
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX28
:
return
MAL_CHANNEL_
29
;
case
PA_CHANNEL_POSITION_AUX29
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX29
:
return
MAL_CHANNEL_
30
;
case
PA_CHANNEL_POSITION_AUX30
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX30
:
return
MAL_CHANNEL_
31
;
case
PA_CHANNEL_POSITION_AUX31
:
return
MAL_CHANNEL_
NONE
;
case
PA_CHANNEL_POSITION_AUX31
:
return
MAL_CHANNEL_
32
;
case
PA_CHANNEL_POSITION_TOP_CENTER
:
return
MAL_CHANNEL_TOP_CENTER
;
case
PA_CHANNEL_POSITION_TOP_CENTER
:
return
MAL_CHANNEL_TOP_CENTER
;
case
PA_CHANNEL_POSITION_TOP_FRONT_LEFT
:
return
MAL_CHANNEL_TOP_FRONT_LEFT
;
case
PA_CHANNEL_POSITION_TOP_FRONT_LEFT
:
return
MAL_CHANNEL_TOP_FRONT_LEFT
;
case
PA_CHANNEL_POSITION_TOP_FRONT_RIGHT
:
return
MAL_CHANNEL_TOP_FRONT_RIGHT
;
case
PA_CHANNEL_POSITION_TOP_FRONT_RIGHT
:
return
MAL_CHANNEL_TOP_FRONT_RIGHT
;
...
@@ -7042,7 +7041,46 @@ static mal_channel mal_channel_position_from_pulse(enum pa_channel_position posi
...
@@ -7042,7 +7041,46 @@ static mal_channel mal_channel_position_from_pulse(enum pa_channel_position posi
}
}
}
}
static
pa_channel_position_t
mal_channel_position_to_pulse
(
mal_channel
position
)
{
switch
(
position
)
{
case
MAL_CHANNEL_NONE
:
return
PA_CHANNEL_POSITION_INVALID
;
case
MAL_CHANNEL_FRONT_LEFT
:
return
PA_CHANNEL_POSITION_FRONT_LEFT
;
case
MAL_CHANNEL_FRONT_RIGHT
:
return
PA_CHANNEL_POSITION_FRONT_RIGHT
;
case
MAL_CHANNEL_FRONT_CENTER
:
return
PA_CHANNEL_POSITION_FRONT_CENTER
;
case
MAL_CHANNEL_LFE
:
return
PA_CHANNEL_POSITION_LFE
;
case
MAL_CHANNEL_BACK_LEFT
:
return
PA_CHANNEL_POSITION_REAR_LEFT
;
case
MAL_CHANNEL_BACK_RIGHT
:
return
PA_CHANNEL_POSITION_REAR_RIGHT
;
case
MAL_CHANNEL_FRONT_LEFT_CENTER
:
return
PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER
;
case
MAL_CHANNEL_FRONT_RIGHT_CENTER
:
return
PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER
;
case
MAL_CHANNEL_BACK_CENTER
:
return
PA_CHANNEL_POSITION_REAR_CENTER
;
case
MAL_CHANNEL_SIDE_LEFT
:
return
PA_CHANNEL_POSITION_SIDE_LEFT
;
case
MAL_CHANNEL_SIDE_RIGHT
:
return
PA_CHANNEL_POSITION_SIDE_RIGHT
;
case
MAL_CHANNEL_TOP_CENTER
:
return
PA_CHANNEL_POSITION_TOP_CENTER
;
case
MAL_CHANNEL_TOP_FRONT_LEFT
:
return
PA_CHANNEL_POSITION_TOP_FRONT_LEFT
;
case
MAL_CHANNEL_TOP_FRONT_CENTER
:
return
PA_CHANNEL_POSITION_TOP_FRONT_CENTER
;
case
MAL_CHANNEL_TOP_FRONT_RIGHT
:
return
PA_CHANNEL_POSITION_TOP_FRONT_RIGHT
;
case
MAL_CHANNEL_TOP_BACK_LEFT
:
return
PA_CHANNEL_POSITION_TOP_REAR_LEFT
;
case
MAL_CHANNEL_TOP_BACK_CENTER
:
return
PA_CHANNEL_POSITION_TOP_REAR_CENTER
;
case
MAL_CHANNEL_TOP_BACK_RIGHT
:
return
PA_CHANNEL_POSITION_TOP_REAR_RIGHT
;
case
MAL_CHANNEL_19
:
return
PA_CHANNEL_POSITION_AUX18
;
case
MAL_CHANNEL_20
:
return
PA_CHANNEL_POSITION_AUX19
;
case
MAL_CHANNEL_21
:
return
PA_CHANNEL_POSITION_AUX20
;
case
MAL_CHANNEL_22
:
return
PA_CHANNEL_POSITION_AUX21
;
case
MAL_CHANNEL_23
:
return
PA_CHANNEL_POSITION_AUX22
;
case
MAL_CHANNEL_24
:
return
PA_CHANNEL_POSITION_AUX23
;
case
MAL_CHANNEL_25
:
return
PA_CHANNEL_POSITION_AUX24
;
case
MAL_CHANNEL_26
:
return
PA_CHANNEL_POSITION_AUX25
;
case
MAL_CHANNEL_27
:
return
PA_CHANNEL_POSITION_AUX26
;
case
MAL_CHANNEL_28
:
return
PA_CHANNEL_POSITION_AUX27
;
case
MAL_CHANNEL_29
:
return
PA_CHANNEL_POSITION_AUX28
;
case
MAL_CHANNEL_30
:
return
PA_CHANNEL_POSITION_AUX29
;
case
MAL_CHANNEL_31
:
return
PA_CHANNEL_POSITION_AUX30
;
case
MAL_CHANNEL_32
:
return
PA_CHANNEL_POSITION_AUX31
;
default:
return
(
pa_channel_position_t
)
position
;
}
}
static
mal_result
mal_context_uninit__pulse
(
mal_context
*
pContext
)
static
mal_result
mal_context_uninit__pulse
(
mal_context
*
pContext
)
...
@@ -7441,8 +7479,17 @@ static mal_result mal_device_init__pulse(mal_context* pContext, mal_device_type
...
@@ -7441,8 +7479,17 @@ static mal_result mal_device_init__pulse(mal_context* pContext, mal_device_type
ss
.
channels
=
pConfig
->
channels
;
ss
.
channels
=
pConfig
->
channels
;
ss
.
rate
=
pConfig
->
sampleRate
;
ss
.
rate
=
pConfig
->
sampleRate
;
pa_channel_map
cmap
;
pa_channel_map
cmap
;
pa_channel_map_init_extend
(
&
cmap
,
ss
.
channels
,
PA_CHANNEL_MAP_DEFAULT
);
cmap
.
channels
=
pConfig
->
channels
;
for
(
mal_uint32
iChannel
=
0
;
iChannel
<
pConfig
->
channels
;
++
iChannel
)
{
cmap
.
map
[
iChannel
]
=
mal_channel_position_to_pulse
(
pConfig
->
channelMap
[
iChannel
]);
}
if
(
pa_channel_map_valid
(
&
cmap
)
==
0
||
pa_channel_map_compatible
(
&
cmap
,
&
ss
)
==
0
)
{
pa_channel_map_init_extend
(
&
cmap
,
ss
.
channels
,
PA_CHANNEL_MAP_DEFAULT
);
// The channel map is invalid, so just fall back to the default.
}
pa_buffer_attr
attr
;
pa_buffer_attr
attr
;
attr
.
maxlength
=
pConfig
->
bufferSizeInFrames
*
mal_get_sample_size_in_bytes
(
mal_format_from_pulse
(
ss
.
format
))
*
ss
.
channels
;
attr
.
maxlength
=
pConfig
->
bufferSizeInFrames
*
mal_get_sample_size_in_bytes
(
mal_format_from_pulse
(
ss
.
format
))
*
ss
.
channels
;
...
@@ -7492,7 +7539,6 @@ static mal_result mal_device_init__pulse(mal_context* pContext, mal_device_type
...
@@ -7492,7 +7539,6 @@ static mal_result mal_device_init__pulse(mal_context* pContext, mal_device_type
}
}
// Internal format.
// Internal format.
const
pa_sample_spec
*
pActualSS
=
pa_stream_get_sample_spec
((
pa_stream
*
)
pDevice
->
pulse
.
pStream
);
const
pa_sample_spec
*
pActualSS
=
pa_stream_get_sample_spec
((
pa_stream
*
)
pDevice
->
pulse
.
pStream
);
if
(
pActualSS
!=
NULL
)
{
if
(
pActualSS
!=
NULL
)
{
...
...
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