Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
4493a964
Commit
4493a964
authored
Feb 10, 2009
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
output_all: no CamelCase
Renamed functions and variables.
parent
a3a6eefc
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
97 additions
and
81 deletions
+97
-81
main.c
src/main.c
+2
-2
output_all.c
src/output_all.c
+66
-58
output_all.h
src/output_all.h
+18
-10
player_thread.c
src/player_thread.c
+11
-11
No files found.
src/main.c
View file @
4493a964
...
...
@@ -258,7 +258,7 @@ int main(int argc, char *argv[])
initialize_decoder_and_player
();
volume_init
();
initAudioConfig
();
initAudioDriver
();
audio_output_all_init
();
client_manager_init
();
replay_gain_global_init
();
initNormalization
();
...
...
@@ -314,7 +314,7 @@ int main(int argc, char *argv[])
input_stream_global_finish
();
finishNormalization
();
finishAudioDriver
();
audio_output_all_finish
();
finishAudioConfig
();
volume_finish
();
mapper_finish
();
...
...
src/output_all.c
View file @
4493a964
...
...
@@ -24,26 +24,26 @@
static
struct
audio_format
input_audio_format
;
static
struct
audio_output
*
audio
OutputArray
;
static
unsigned
int
audioOutputArraySize
;
static
struct
audio_output
*
audio
_outputs
;
static
unsigned
int
num_audio_outputs
;
unsigned
int
audio_output_count
(
void
)
{
return
audioOutputArraySize
;
return
num_audio_outputs
;
}
struct
audio_output
*
audio_output_get
(
unsigned
i
)
{
assert
(
i
<
audioOutputArraySize
);
assert
(
i
<
num_audio_outputs
);
return
&
audio
OutputArray
[
i
];
return
&
audio
_outputs
[
i
];
}
struct
audio_output
*
audio_output_find
(
const
char
*
name
)
{
for
(
unsigned
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
{
for
(
unsigned
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
{
struct
audio_output
*
ao
=
audio_output_get
(
i
);
if
(
strcmp
(
ao
->
name
,
name
)
==
0
)
...
...
@@ -67,26 +67,26 @@ audio_output_config_count(void)
return
nr
;
}
/* make sure initPlayerData is called before this function!! */
void
initAudioDriver
(
void
)
void
audio_output_all_init
(
void
)
{
const
struct
config_param
*
param
=
NULL
;
unsigned
int
i
;
notify_init
(
&
audio_output_client_notify
);
audioOutputArraySize
=
audio_output_config_count
();
audio
OutputArray
=
g_new
(
struct
audio_output
,
audioOutputArraySize
);
num_audio_outputs
=
audio_output_config_count
();
audio
_outputs
=
g_new
(
struct
audio_output
,
num_audio_outputs
);
for
(
i
=
0
;
i
<
audioOutputArraySize
;
i
++
)
for
(
i
=
0
;
i
<
num_audio_outputs
;
i
++
)
{
struct
audio_output
*
output
=
&
audio
OutputArray
[
i
];
struct
audio_output
*
output
=
&
audio
_outputs
[
i
];
unsigned
int
j
;
param
=
config_get_next_param
(
CONF_AUDIO_OUTPUT
,
param
);
/* only allow param to be NULL if there just one audioOutput */
assert
(
param
||
(
audioOutputArraySize
==
1
));
assert
(
param
||
(
num_audio_outputs
==
1
));
if
(
!
audio_output_init
(
output
,
param
))
{
if
(
param
)
...
...
@@ -103,7 +103,7 @@ void initAudioDriver(void)
/* require output names to be unique: */
for
(
j
=
0
;
j
<
i
;
j
++
)
{
if
(
!
strcmp
(
output
->
name
,
audio
OutputArray
[
j
].
name
))
{
if
(
!
strcmp
(
output
->
name
,
audio
_outputs
[
j
].
name
))
{
g_error
(
"output devices with identical "
"names: %s
\n
"
,
output
->
name
);
}
...
...
@@ -111,17 +111,18 @@ void initAudioDriver(void)
}
}
void
finishAudioDriver
(
void
)
void
audio_output_all_finish
(
void
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
audioOutputArraySize
;
i
++
)
{
audio_output_finish
(
&
audio
OutputArray
[
i
]);
for
(
i
=
0
;
i
<
num_audio_outputs
;
i
++
)
{
audio_output_finish
(
&
audio
_outputs
[
i
]);
}
g_free
(
audio
OutputArray
);
audio
OutputArray
=
NULL
;
audioOutputArraySize
=
0
;
g_free
(
audio
_outputs
);
audio
_outputs
=
NULL
;
num_audio_outputs
=
0
;
notify_deinit
(
&
audio_output_client_notify
);
}
...
...
@@ -133,9 +134,9 @@ static void audio_output_wait_all(void)
while
(
1
)
{
int
finished
=
1
;
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
if
(
audio_output_is_open
(
&
audio
OutputArray
[
i
])
&&
!
audio_output_command_is_finished
(
&
audio
OutputArray
[
i
]))
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
if
(
audio_output_is_open
(
&
audio
_outputs
[
i
])
&&
!
audio_output_command_is_finished
(
&
audio
_outputs
[
i
]))
finished
=
0
;
if
(
finished
)
...
...
@@ -145,18 +146,20 @@ static void audio_output_wait_all(void)
};
}
static
void
syncAudioDeviceStates
(
void
)
static
void
audio_output_all_update
(
void
)
{
unsigned
int
i
;
if
(
!
audio_format_defined
(
&
input_audio_format
))
return
;
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
audio_output_update
(
&
audio
OutputArray
[
i
],
&
input_audio_format
);
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
audio_output_update
(
&
audio
_outputs
[
i
],
&
input_audio_format
);
}
bool
playAudio
(
const
char
*
buffer
,
size_t
length
)
bool
audio_output_all_play
(
const
char
*
buffer
,
size_t
length
)
{
bool
ret
=
false
;
unsigned
int
i
;
...
...
@@ -165,18 +168,18 @@ bool playAudio(const char *buffer, size_t length)
/* no partial frames allowed */
assert
((
length
%
audio_format_frame_size
(
&
input_audio_format
))
==
0
);
syncAudioDeviceStates
();
audio_output_all_update
();
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
if
(
audio_output_is_open
(
&
audio
OutputArray
[
i
]))
audio_output_play
(
&
audio
OutputArray
[
i
],
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
if
(
audio_output_is_open
(
&
audio
_outputs
[
i
]))
audio_output_play
(
&
audio
_outputs
[
i
],
buffer
,
length
);
while
(
true
)
{
bool
finished
=
true
;
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
{
struct
audio_output
*
ao
=
&
audio
OutputArray
[
i
];
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
{
struct
audio_output
*
ao
=
&
audio
_outputs
[
i
];
if
(
!
audio_output_is_open
(
ao
))
continue
;
...
...
@@ -198,73 +201,78 @@ bool playAudio(const char *buffer, size_t length)
return
ret
;
}
bool
openAudioDevice
(
const
struct
audio_format
*
audioFormat
)
bool
audio_output_all_open
(
const
struct
audio_format
*
audio_format
)
{
bool
ret
=
false
;
unsigned
int
i
;
if
(
!
audio
OutputArray
)
if
(
!
audio
_outputs
)
return
false
;
if
(
audio
F
ormat
!=
NULL
)
input_audio_format
=
*
audio
F
ormat
;
if
(
audio
_f
ormat
!=
NULL
)
input_audio_format
=
*
audio
_f
ormat
;
syncAudioDeviceStates
();
audio_output_all_update
();
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
{
if
(
audio
OutputArray
[
i
].
open
)
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
{
if
(
audio
_outputs
[
i
].
open
)
ret
=
true
;
}
if
(
!
ret
)
/* close all devices if there was an error */
closeAudioDevic
e
();
audio_output_all_clos
e
();
return
ret
;
}
void
audio_output_pause_all
(
void
)
void
audio_output_all_pause
(
void
)
{
unsigned
int
i
;
syncAudioDeviceStates
();
audio_output_all_update
();
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
if
(
audio_output_is_open
(
&
audio
OutputArray
[
i
]))
audio_output_pause
(
&
audio
OutputArray
[
i
]);
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
if
(
audio_output_is_open
(
&
audio
_outputs
[
i
]))
audio_output_pause
(
&
audio
_outputs
[
i
]);
audio_output_wait_all
();
}
void
dropBufferedAudio
(
void
)
void
audio_output_all_cancel
(
void
)
{
unsigned
int
i
;
syncAudioDeviceStates
();
audio_output_all_update
();
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
{
if
(
audio_output_is_open
(
&
audio
OutputArray
[
i
]))
audio_output_cancel
(
&
audio
OutputArray
[
i
]);
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
{
if
(
audio_output_is_open
(
&
audio
_outputs
[
i
]))
audio_output_cancel
(
&
audio
_outputs
[
i
]);
}
audio_output_wait_all
();
}
void
closeAudioDevice
(
void
)
void
audio_output_all_close
(
void
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
audio_output_close
(
&
audio
OutputArray
[
i
]);
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
audio_output_close
(
&
audio
_outputs
[
i
]);
}
void
sendMetadataToAudioDevice
(
const
struct
tag
*
tag
)
void
audio_output_all_tag
(
const
struct
tag
*
tag
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
audioOutputArraySize
;
++
i
)
if
(
audio_output_is_open
(
&
audio
OutputArray
[
i
]))
audio_output_send_tag
(
&
audio
OutputArray
[
i
],
tag
);
for
(
i
=
0
;
i
<
num_audio_outputs
;
++
i
)
if
(
audio_output_is_open
(
&
audio
_outputs
[
i
]))
audio_output_send_tag
(
&
audio
_outputs
[
i
],
tag
);
audio_output_wait_all
();
}
src/output_all.h
View file @
4493a964
...
...
@@ -31,6 +31,12 @@
struct
audio_format
;
struct
tag
;
void
audio_output_all_init
(
void
);
void
audio_output_all_finish
(
void
);
/**
* Returns the total number of audio output devices, including those
* who are disabled right now.
...
...
@@ -50,20 +56,22 @@ audio_output_get(unsigned i);
struct
audio_output
*
audio_output_find
(
const
char
*
name
);
void
initAudioDriver
(
void
);
void
finishAudioDriver
(
void
);
bool
openAudioDevice
(
const
struct
audio_format
*
audioFormat
);
bool
audio_output_all_open
(
const
struct
audio_format
*
audio_format
);
bool
playAudio
(
const
char
*
playChunk
,
size_t
size
);
void
audio_output_all_close
(
void
);
void
audio_output_pause_all
(
void
);
bool
audio_output_all_play
(
const
char
*
data
,
size_t
size
);
void
dropBufferedAudio
(
void
);
void
audio_output_all_tag
(
const
struct
tag
*
tag
);
void
closeAudioDevice
(
void
);
void
audio_output_all_pause
(
void
);
void
sendMetadataToAudioDevice
(
const
struct
tag
*
tag
);
void
audio_output_all_cancel
(
void
);
#endif
src/player_thread.c
View file @
4493a964
...
...
@@ -181,10 +181,10 @@ static void player_process_command(struct player *player)
case
PLAYER_COMMAND_PAUSE
:
player
->
paused
=
!
player
->
paused
;
if
(
player
->
paused
)
{
audio_output_
pause_all
();
audio_output_
all_pause
();
pc
.
state
=
PLAYER_STATE_PAUSE
;
}
else
{
if
(
openAudioDevice
(
NULL
))
{
if
(
audio_output_all_open
(
NULL
))
{
pc
.
state
=
PLAYER_STATE_PLAY
;
}
else
{
char
*
uri
=
song_get_uri
(
dc
.
next_song
);
...
...
@@ -203,7 +203,7 @@ static void player_process_command(struct player *player)
break
;
case
PLAYER_COMMAND_SEEK
:
dropBufferedAudio
();
audio_output_all_cancel
();
if
(
player_seek_decoder
(
player
))
{
player
->
xfade
=
XFADE_UNKNOWN
;
...
...
@@ -245,7 +245,7 @@ play_chunk(struct song *song, struct music_chunk *chunk,
pc
.
bit_rate
=
chunk
->
bit_rate
;
if
(
chunk
->
tag
!=
NULL
)
{
sendMetadataToAudioDevice
(
chunk
->
tag
);
audio_output_all_tag
(
chunk
->
tag
);
if
(
!
song_is_file
(
song
))
{
/* always update the tag of remote streams */
...
...
@@ -272,7 +272,7 @@ play_chunk(struct song *song, struct music_chunk *chunk,
pcm_volume
(
chunk
->
data
,
chunk
->
length
,
format
,
pc
.
software_volume
);
if
(
!
playAudio
(
chunk
->
data
,
chunk
->
length
))
{
if
(
!
audio_output_all_play
(
chunk
->
data
,
chunk
->
length
))
{
pc
.
errored_song
=
dc
.
current_song
;
pc
.
error
=
PLAYER_ERROR_AUDIO
;
return
false
;
...
...
@@ -320,7 +320,7 @@ static void do_play(void)
if
(
pc
.
command
==
PLAYER_COMMAND_STOP
||
pc
.
command
==
PLAYER_COMMAND_EXIT
||
pc
.
command
==
PLAYER_COMMAND_CLOSE_AUDIO
)
{
dropBufferedAudio
();
audio_output_all_cancel
();
break
;
}
...
...
@@ -348,7 +348,7 @@ static void do_play(void)
else
if
(
!
decoder_is_starting
())
{
/* the decoder is ready and ok */
player
.
decoder_starting
=
false
;
if
(
!
openAudioDevice
(
&
dc
.
out_audio_format
))
{
if
(
!
audio_output_all_open
(
&
dc
.
out_audio_format
))
{
char
*
uri
=
song_get_uri
(
dc
.
next_song
);
g_warning
(
"problems opening audio device "
"while playing
\"
%s
\"
"
,
uri
);
...
...
@@ -361,7 +361,7 @@ static void do_play(void)
}
if
(
player
.
paused
)
closeAudioDevic
e
();
audio_output_all_clos
e
();
pc
.
total_time
=
dc
.
total_time
;
pc
.
audio_format
=
dc
.
in_audio_format
;
...
...
@@ -506,7 +506,7 @@ static void do_play(void)
unsigned
num_frames
=
CHUNK_SIZE
/
frame_size
;
/*DEBUG("waiting for decoded audio, play silence\n");*/
if
(
!
playAudio
(
silence
,
num_frames
*
frame_size
))
if
(
!
audio_output_all_play
(
silence
,
num_frames
*
frame_size
))
break
;
}
}
...
...
@@ -540,13 +540,13 @@ static gpointer player_task(G_GNUC_UNUSED gpointer arg)
break
;
case
PLAYER_COMMAND_CLOSE_AUDIO
:
closeAudioDevic
e
();
audio_output_all_clos
e
();
player_command_finished
();
break
;
case
PLAYER_COMMAND_EXIT
:
dc_quit
();
closeAudioDevic
e
();
audio_output_all_clos
e
();
player_command_finished
();
g_thread_exit
(
NULL
);
break
;
...
...
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