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
d9cb85df
Commit
d9cb85df
authored
Nov 09, 2016
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
output/Plugin: remove 'Error&' parameters, use C++ exceptions only
parent
445e82be
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
198 additions
and
364 deletions
+198
-364
Init.cxx
src/output/Init.cxx
+11
-22
Internal.hxx
src/output/Internal.hxx
+1
-3
MultipleOutputs.cxx
src/output/MultipleOutputs.cxx
+3
-9
MultipleOutputs.hxx
src/output/MultipleOutputs.hxx
+0
-1
OutputControl.cxx
src/output/OutputControl.cxx
+0
-1
OutputPlugin.cxx
src/output/OutputPlugin.cxx
+11
-15
OutputPlugin.hxx
src/output/OutputPlugin.hxx
+11
-21
OutputThread.cxx
src/output/OutputThread.cxx
+3
-35
Wrapper.hxx
src/output/Wrapper.hxx
+9
-13
AlsaOutputPlugin.cxx
src/output/plugins/AlsaOutputPlugin.cxx
+10
-13
AoOutputPlugin.cxx
src/output/plugins/AoOutputPlugin.cxx
+4
-8
FifoOutputPlugin.cxx
src/output/plugins/FifoOutputPlugin.cxx
+7
-8
HaikuOutputPlugin.cxx
src/output/plugins/HaikuOutputPlugin.cxx
+7
-9
JackOutputPlugin.cxx
src/output/plugins/JackOutputPlugin.cxx
+9
-11
NullOutputPlugin.cxx
src/output/plugins/NullOutputPlugin.cxx
+4
-7
OSXOutputPlugin.cxx
src/output/plugins/OSXOutputPlugin.cxx
+6
-12
OpenALOutputPlugin.cxx
src/output/plugins/OpenALOutputPlugin.cxx
+7
-10
OssOutputPlugin.cxx
src/output/plugins/OssOutputPlugin.cxx
+8
-10
PipeOutputPlugin.cxx
src/output/plugins/PipeOutputPlugin.cxx
+7
-9
PulseOutputPlugin.cxx
src/output/plugins/PulseOutputPlugin.cxx
+10
-14
PulseOutputPlugin.hxx
src/output/plugins/PulseOutputPlugin.hxx
+0
-1
RecorderOutputPlugin.cxx
src/output/plugins/RecorderOutputPlugin.cxx
+7
-9
RoarOutputPlugin.cxx
src/output/plugins/RoarOutputPlugin.cxx
+6
-7
ShoutOutputPlugin.cxx
src/output/plugins/ShoutOutputPlugin.cxx
+7
-9
SndioOutputPlugin.cxx
src/output/plugins/SndioOutputPlugin.cxx
+7
-11
SolarisOutputPlugin.cxx
src/output/plugins/SolarisOutputPlugin.cxx
+4
-7
WinmmOutputPlugin.cxx
src/output/plugins/WinmmOutputPlugin.cxx
+6
-8
HttpdInternal.hxx
src/output/plugins/httpd/HttpdInternal.hxx
+1
-1
HttpdOutputPlugin.cxx
src/output/plugins/httpd/HttpdOutputPlugin.cxx
+9
-14
SlesOutputPlugin.cxx
src/output/plugins/sles/SlesOutputPlugin.cxx
+7
-9
Control.cxx
src/player/Control.cxx
+0
-10
Control.hxx
src/player/Control.hxx
+0
-2
Thread.cxx
src/player/Thread.cxx
+0
-1
run_output.cxx
test/run_output.cxx
+16
-44
No files found.
src/output/Init.cxx
View file @
d9cb85df
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
#include "config/ConfigError.hxx"
#include "config/ConfigError.hxx"
#include "config/ConfigGlobal.hxx"
#include "config/ConfigGlobal.hxx"
#include "config/Block.hxx"
#include "config/Block.hxx"
#include "util/Error.hxx"
#include "util/
Runtime
Error.hxx"
#include "Log.hxx"
#include "Log.hxx"
#include <stdexcept>
#include <stdexcept>
...
@@ -62,7 +62,7 @@ AudioOutput::AudioOutput(const AudioOutputPlugin &_plugin,
...
@@ -62,7 +62,7 @@ AudioOutput::AudioOutput(const AudioOutputPlugin &_plugin,
}
}
static
const
AudioOutputPlugin
*
static
const
AudioOutputPlugin
*
audio_output_detect
(
Error
&
error
)
audio_output_detect
()
{
{
LogDefault
(
output_domain
,
"Attempt to detect audio output device"
);
LogDefault
(
output_domain
,
"Attempt to detect audio output device"
);
...
@@ -77,8 +77,7 @@ audio_output_detect(Error &error)
...
@@ -77,8 +77,7 @@ audio_output_detect(Error &error)
return
plugin
;
return
plugin
;
}
}
error
.
Set
(
output_domain
,
"Unable to detect an audio device"
);
throw
std
::
runtime_error
(
"Unable to detect an audio device"
);
return
nullptr
;
}
}
/**
/**
...
@@ -272,8 +271,7 @@ audio_output_setup(EventLoop &event_loop, AudioOutput &ao,
...
@@ -272,8 +271,7 @@ audio_output_setup(EventLoop &event_loop, AudioOutput &ao,
AudioOutput
*
AudioOutput
*
audio_output_new
(
EventLoop
&
event_loop
,
const
ConfigBlock
&
block
,
audio_output_new
(
EventLoop
&
event_loop
,
const
ConfigBlock
&
block
,
MixerListener
&
mixer_listener
,
MixerListener
&
mixer_listener
,
PlayerControl
&
pc
,
PlayerControl
&
pc
)
Error
&
error
)
{
{
const
AudioOutputPlugin
*
plugin
;
const
AudioOutputPlugin
*
plugin
;
...
@@ -281,34 +279,25 @@ audio_output_new(EventLoop &event_loop, const ConfigBlock &block,
...
@@ -281,34 +279,25 @@ audio_output_new(EventLoop &event_loop, const ConfigBlock &block,
const
char
*
p
;
const
char
*
p
;
p
=
block
.
GetBlockValue
(
AUDIO_OUTPUT_TYPE
);
p
=
block
.
GetBlockValue
(
AUDIO_OUTPUT_TYPE
);
if
(
p
==
nullptr
)
{
if
(
p
==
nullptr
)
error
.
Set
(
config_domain
,
throw
std
::
runtime_error
(
"Missing
\"
type
\"
configuration"
);
"Missing
\"
type
\"
configuration"
);
return
nullptr
;
}
plugin
=
AudioOutputPlugin_get
(
p
);
plugin
=
AudioOutputPlugin_get
(
p
);
if
(
plugin
==
nullptr
)
{
if
(
plugin
==
nullptr
)
error
.
Format
(
config_domain
,
throw
FormatRuntimeError
(
"No such audio output plugin: %s"
,
p
);
"No such audio output plugin: %s"
,
p
);
return
nullptr
;
}
}
else
{
}
else
{
LogWarning
(
output_domain
,
LogWarning
(
output_domain
,
"No 'AudioOutput' defined in config file"
);
"No 'AudioOutput' defined in config file"
);
plugin
=
audio_output_detect
(
error
);
plugin
=
audio_output_detect
();
if
(
plugin
==
nullptr
)
return
nullptr
;
FormatDefault
(
output_domain
,
FormatDefault
(
output_domain
,
"Successfully detected a %s audio device"
,
"Successfully detected a %s audio device"
,
plugin
->
name
);
plugin
->
name
);
}
}
AudioOutput
*
ao
=
ao_plugin_init
(
plugin
,
block
,
error
);
AudioOutput
*
ao
=
ao_plugin_init
(
plugin
,
block
);
if
(
ao
==
nullptr
)
assert
(
ao
!=
nullptr
);
return
nullptr
;
try
{
try
{
audio_output_setup
(
event_loop
,
*
ao
,
mixer_listener
,
block
);
audio_output_setup
(
event_loop
,
*
ao
,
mixer_listener
,
block
);
...
...
src/output/Internal.hxx
View file @
d9cb85df
...
@@ -30,7 +30,6 @@
...
@@ -30,7 +30,6 @@
#include "thread/Thread.hxx"
#include "thread/Thread.hxx"
#include "system/PeriodClock.hxx"
#include "system/PeriodClock.hxx"
class
Error
;
class
PreparedFilter
;
class
PreparedFilter
;
class
Filter
;
class
Filter
;
class
MusicPipe
;
class
MusicPipe
;
...
@@ -467,8 +466,7 @@ extern struct notify audio_output_client_notify;
...
@@ -467,8 +466,7 @@ extern struct notify audio_output_client_notify;
AudioOutput
*
AudioOutput
*
audio_output_new
(
EventLoop
&
event_loop
,
const
ConfigBlock
&
block
,
audio_output_new
(
EventLoop
&
event_loop
,
const
ConfigBlock
&
block
,
MixerListener
&
mixer_listener
,
MixerListener
&
mixer_listener
,
PlayerControl
&
pc
,
PlayerControl
&
pc
);
Error
&
error
);
void
void
audio_output_free
(
AudioOutput
*
ao
);
audio_output_free
(
AudioOutput
*
ao
);
...
...
src/output/MultipleOutputs.cxx
View file @
d9cb85df
...
@@ -26,7 +26,6 @@
...
@@ -26,7 +26,6 @@
#include "MusicPipe.hxx"
#include "MusicPipe.hxx"
#include "MusicChunk.hxx"
#include "MusicChunk.hxx"
#include "system/FatalError.hxx"
#include "system/FatalError.hxx"
#include "util/Error.hxx"
#include "config/Block.hxx"
#include "config/Block.hxx"
#include "config/ConfigGlobal.hxx"
#include "config/ConfigGlobal.hxx"
#include "config/ConfigOption.hxx"
#include "config/ConfigOption.hxx"
...
@@ -54,14 +53,9 @@ static AudioOutput *
...
@@ -54,14 +53,9 @@ static AudioOutput *
LoadOutput
(
EventLoop
&
event_loop
,
MixerListener
&
mixer_listener
,
LoadOutput
(
EventLoop
&
event_loop
,
MixerListener
&
mixer_listener
,
PlayerControl
&
pc
,
const
ConfigBlock
&
block
)
PlayerControl
&
pc
,
const
ConfigBlock
&
block
)
try
{
try
{
Error
error
;
return
audio_output_new
(
event_loop
,
block
,
AudioOutput
*
output
=
audio_output_new
(
event_loop
,
block
,
mixer_listener
,
mixer_listener
,
pc
);
pc
,
error
);
if
(
output
==
nullptr
)
throw
std
::
runtime_error
(
error
.
GetMessage
());
return
output
;
}
catch
(
const
std
::
runtime_error
&
e
)
{
}
catch
(
const
std
::
runtime_error
&
e
)
{
if
(
block
.
line
>
0
)
if
(
block
.
line
>
0
)
FormatFatalError
(
"line %i: %s"
,
FormatFatalError
(
"line %i: %s"
,
...
...
src/output/MultipleOutputs.hxx
View file @
d9cb85df
...
@@ -42,7 +42,6 @@ class MixerListener;
...
@@ -42,7 +42,6 @@ class MixerListener;
struct
MusicChunk
;
struct
MusicChunk
;
struct
PlayerControl
;
struct
PlayerControl
;
struct
AudioOutput
;
struct
AudioOutput
;
class
Error
;
class
MultipleOutputs
{
class
MultipleOutputs
{
MixerListener
&
mixer_listener
;
MixerListener
&
mixer_listener
;
...
...
src/output/OutputControl.cxx
View file @
d9cb85df
...
@@ -24,7 +24,6 @@
...
@@ -24,7 +24,6 @@
#include "mixer/MixerControl.hxx"
#include "mixer/MixerControl.hxx"
#include "notify.hxx"
#include "notify.hxx"
#include "filter/plugins/ReplayGainFilterPlugin.hxx"
#include "filter/plugins/ReplayGainFilterPlugin.hxx"
#include "util/Error.hxx"
#include "Log.hxx"
#include "Log.hxx"
#include <stdexcept>
#include <stdexcept>
...
...
src/output/OutputPlugin.cxx
View file @
d9cb85df
...
@@ -23,13 +23,12 @@
...
@@ -23,13 +23,12 @@
AudioOutput
*
AudioOutput
*
ao_plugin_init
(
const
AudioOutputPlugin
*
plugin
,
ao_plugin_init
(
const
AudioOutputPlugin
*
plugin
,
const
ConfigBlock
&
block
,
const
ConfigBlock
&
block
)
Error
&
error
)
{
{
assert
(
plugin
!=
nullptr
);
assert
(
plugin
!=
nullptr
);
assert
(
plugin
->
init
!=
nullptr
);
assert
(
plugin
->
init
!=
nullptr
);
return
plugin
->
init
(
block
,
error
);
return
plugin
->
init
(
block
);
}
}
void
void
...
@@ -38,12 +37,11 @@ ao_plugin_finish(AudioOutput *ao)
...
@@ -38,12 +37,11 @@ ao_plugin_finish(AudioOutput *ao)
ao
->
plugin
.
finish
(
ao
);
ao
->
plugin
.
finish
(
ao
);
}
}
bool
void
ao_plugin_enable
(
AudioOutput
*
ao
,
Error
&
error_r
)
ao_plugin_enable
(
AudioOutput
*
ao
)
{
{
return
ao
->
plugin
.
enable
!=
nullptr
if
(
ao
->
plugin
.
enable
!=
nullptr
)
?
ao
->
plugin
.
enable
(
ao
,
error_r
)
ao
->
plugin
.
enable
(
ao
);
:
true
;
}
}
void
void
...
@@ -53,11 +51,10 @@ ao_plugin_disable(AudioOutput *ao)
...
@@ -53,11 +51,10 @@ ao_plugin_disable(AudioOutput *ao)
ao
->
plugin
.
disable
(
ao
);
ao
->
plugin
.
disable
(
ao
);
}
}
bool
void
ao_plugin_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
ao_plugin_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
)
Error
&
error
)
{
{
return
ao
->
plugin
.
open
(
ao
,
audio_format
,
error
);
ao
->
plugin
.
open
(
ao
,
audio_format
);
}
}
void
void
...
@@ -82,10 +79,9 @@ ao_plugin_send_tag(AudioOutput *ao, const Tag &tag)
...
@@ -82,10 +79,9 @@ ao_plugin_send_tag(AudioOutput *ao, const Tag &tag)
}
}
size_t
size_t
ao_plugin_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
ao_plugin_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
)
Error
&
error
)
{
{
return
ao
->
plugin
.
play
(
ao
,
chunk
,
size
,
error
);
return
ao
->
plugin
.
play
(
ao
,
chunk
,
size
);
}
}
void
void
...
...
src/output/OutputPlugin.hxx
View file @
d9cb85df
...
@@ -29,7 +29,6 @@ struct AudioFormat;
...
@@ -29,7 +29,6 @@ struct AudioFormat;
struct
Tag
;
struct
Tag
;
struct
AudioOutput
;
struct
AudioOutput
;
struct
MixerPlugin
;
struct
MixerPlugin
;
class
Error
;
/**
/**
* A plugin which controls an audio output device.
* A plugin which controls an audio output device.
...
@@ -54,10 +53,8 @@ struct AudioOutputPlugin {
...
@@ -54,10 +53,8 @@ struct AudioOutputPlugin {
*
*
* @param param the configuration section, or nullptr if there is
* @param param the configuration section, or nullptr if there is
* no configuration
* no configuration
* @return nullptr on error, or an opaque pointer to the plugin's
* data
*/
*/
AudioOutput
*
(
*
init
)(
const
ConfigBlock
&
block
,
Error
&
error
);
AudioOutput
*
(
*
init
)(
const
ConfigBlock
&
block
);
/**
/**
* Free resources allocated by this device.
* Free resources allocated by this device.
...
@@ -69,10 +66,8 @@ struct AudioOutputPlugin {
...
@@ -69,10 +66,8 @@ struct AudioOutputPlugin {
* for the device to be opened.
* for the device to be opened.
*
*
* Throws #std::runtime_error on error.
* Throws #std::runtime_error on error.
*
* @return true on success, false on error
*/
*/
bool
(
*
enable
)(
AudioOutput
*
data
,
Error
&
error
);
void
(
*
enable
)(
AudioOutput
*
data
);
/**
/**
* Disables the device. It is closed before this method is
* Disables the device. It is closed before this method is
...
@@ -88,8 +83,7 @@ struct AudioOutputPlugin {
...
@@ -88,8 +83,7 @@ struct AudioOutputPlugin {
* @param audio_format the audio format in which data is going
* @param audio_format the audio format in which data is going
* to be delivered; may be modified by the plugin
* to be delivered; may be modified by the plugin
*/
*/
bool
(
*
open
)(
AudioOutput
*
data
,
AudioFormat
&
audio_format
,
void
(
*
open
)(
AudioOutput
*
data
,
AudioFormat
&
audio_format
);
Error
&
error
);
/**
/**
* Close the device.
* Close the device.
...
@@ -118,11 +112,10 @@ struct AudioOutputPlugin {
...
@@ -118,11 +112,10 @@ struct AudioOutputPlugin {
*
*
* Throws #std::runtime_error on error.
* Throws #std::runtime_error on error.
*
*
* @return the number of bytes played
, or 0 on error
* @return the number of bytes played
*/
*/
size_t
(
*
play
)(
AudioOutput
*
data
,
size_t
(
*
play
)(
AudioOutput
*
data
,
const
void
*
chunk
,
size_t
size
,
const
void
*
chunk
,
size_t
size
);
Error
&
error
);
/**
/**
* Wait until the device has finished playing.
* Wait until the device has finished playing.
...
@@ -168,21 +161,19 @@ ao_plugin_test_default_device(const AudioOutputPlugin *plugin)
...
@@ -168,21 +161,19 @@ ao_plugin_test_default_device(const AudioOutputPlugin *plugin)
gcc_malloc
gcc_malloc
AudioOutput
*
AudioOutput
*
ao_plugin_init
(
const
AudioOutputPlugin
*
plugin
,
ao_plugin_init
(
const
AudioOutputPlugin
*
plugin
,
const
ConfigBlock
&
block
,
const
ConfigBlock
&
block
);
Error
&
error
);
void
void
ao_plugin_finish
(
AudioOutput
*
ao
);
ao_plugin_finish
(
AudioOutput
*
ao
);
bool
void
ao_plugin_enable
(
AudioOutput
*
ao
,
Error
&
error
);
ao_plugin_enable
(
AudioOutput
*
ao
);
void
void
ao_plugin_disable
(
AudioOutput
*
ao
);
ao_plugin_disable
(
AudioOutput
*
ao
);
bool
void
ao_plugin_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
ao_plugin_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
);
Error
&
error
);
void
void
ao_plugin_close
(
AudioOutput
*
ao
);
ao_plugin_close
(
AudioOutput
*
ao
);
...
@@ -195,8 +186,7 @@ void
...
@@ -195,8 +186,7 @@ void
ao_plugin_send_tag
(
AudioOutput
*
ao
,
const
Tag
&
tag
);
ao_plugin_send_tag
(
AudioOutput
*
ao
,
const
Tag
&
tag
);
size_t
size_t
ao_plugin_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
ao_plugin_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
);
Error
&
error
);
void
void
ao_plugin_drain
(
AudioOutput
*
ao
);
ao_plugin_drain
(
AudioOutput
*
ao
);
...
...
src/output/OutputThread.cxx
View file @
d9cb85df
...
@@ -34,7 +34,6 @@
...
@@ -34,7 +34,6 @@
#include "thread/Util.hxx"
#include "thread/Util.hxx"
#include "thread/Slack.hxx"
#include "thread/Slack.hxx"
#include "thread/Name.hxx"
#include "thread/Name.hxx"
#include "util/Error.hxx"
#include "util/ConstBuffer.hxx"
#include "util/ConstBuffer.hxx"
#include "Log.hxx"
#include "Log.hxx"
#include "Compiler.h"
#include "Compiler.h"
...
@@ -62,13 +61,7 @@ AudioOutput::Enable()
...
@@ -62,13 +61,7 @@ AudioOutput::Enable()
try
{
try
{
const
ScopeUnlock
unlock
(
mutex
);
const
ScopeUnlock
unlock
(
mutex
);
Error
error
;
ao_plugin_enable
(
this
);
if
(
!
ao_plugin_enable
(
this
,
error
))
{
FormatError
(
error
,
"Failed to enable
\"
%s
\"
[%s]"
,
name
,
plugin
.
name
);
return
false
;
}
}
catch
(
const
std
::
runtime_error
&
e
)
{
}
catch
(
const
std
::
runtime_error
&
e
)
{
FormatError
(
e
,
FormatError
(
e
,
"Failed to enable
\"
%s
\"
[%s]"
,
"Failed to enable
\"
%s
\"
[%s]"
,
...
@@ -138,8 +131,6 @@ AudioOutput::CloseFilter()
...
@@ -138,8 +131,6 @@ AudioOutput::CloseFilter()
inline
void
inline
void
AudioOutput
::
Open
()
AudioOutput
::
Open
()
{
{
bool
success
;
Error
error
;
struct
audio_format_string
af_string
;
struct
audio_format_string
af_string
;
assert
(
!
open
);
assert
(
!
open
);
...
@@ -179,7 +170,7 @@ AudioOutput::Open()
...
@@ -179,7 +170,7 @@ AudioOutput::Open()
retry_without_dsd
:
retry_without_dsd
:
try
{
try
{
success
=
ao_plugin_open
(
this
,
out_audio_format
,
error
);
ao_plugin_open
(
this
,
out_audio_format
);
}
catch
(
const
std
::
runtime_error
&
e
)
{
}
catch
(
const
std
::
runtime_error
&
e
)
{
FormatError
(
e
,
"Failed to open
\"
%s
\"
[%s]"
,
FormatError
(
e
,
"Failed to open
\"
%s
\"
[%s]"
,
name
,
plugin
.
name
);
name
,
plugin
.
name
);
...
@@ -194,19 +185,6 @@ AudioOutput::Open()
...
@@ -194,19 +185,6 @@ AudioOutput::Open()
assert
(
!
open
);
assert
(
!
open
);
if
(
!
success
)
{
FormatError
(
error
,
"Failed to open
\"
%s
\"
[%s]"
,
name
,
plugin
.
name
);
{
const
ScopeUnlock
unlock
(
mutex
);
CloseFilter
();
}
fail_timer
.
Update
();
return
;
}
try
{
try
{
convert_filter_set
(
convert_filter
.
Get
(),
out_audio_format
);
convert_filter_set
(
convert_filter
.
Get
(),
out_audio_format
);
}
catch
(
const
std
::
runtime_error
&
e
)
{
}
catch
(
const
std
::
runtime_error
&
e
)
{
...
@@ -289,8 +267,6 @@ AudioOutput::CloseOutput(bool drain)
...
@@ -289,8 +267,6 @@ AudioOutput::CloseOutput(bool drain)
void
void
AudioOutput
::
ReopenFilter
()
AudioOutput
::
ReopenFilter
()
{
{
Error
error
;
{
{
const
ScopeUnlock
unlock
(
mutex
);
const
ScopeUnlock
unlock
(
mutex
);
CloseFilter
();
CloseFilter
();
...
@@ -486,8 +462,6 @@ AudioOutput::PlayChunk(const MusicChunk *chunk)
...
@@ -486,8 +462,6 @@ AudioOutput::PlayChunk(const MusicChunk *chunk)
return
false
;
return
false
;
}
}
Error
error
;
while
(
!
data
.
IsEmpty
()
&&
command
==
Command
::
NONE
)
{
while
(
!
data
.
IsEmpty
()
&&
command
==
Command
::
NONE
)
{
if
(
!
WaitForDelay
())
if
(
!
WaitForDelay
())
break
;
break
;
...
@@ -496,13 +470,7 @@ AudioOutput::PlayChunk(const MusicChunk *chunk)
...
@@ -496,13 +470,7 @@ AudioOutput::PlayChunk(const MusicChunk *chunk)
try
{
try
{
const
ScopeUnlock
unlock
(
mutex
);
const
ScopeUnlock
unlock
(
mutex
);
nbytes
=
ao_plugin_play
(
this
,
data
.
data
,
data
.
size
,
nbytes
=
ao_plugin_play
(
this
,
data
.
data
,
data
.
size
);
error
);
if
(
nbytes
==
0
)
/* play()==0 means failure */
FormatError
(
error
,
"
\"
%s
\"
[%s] failed to play"
,
name
,
plugin
.
name
);
}
catch
(
const
std
::
runtime_error
&
e
)
{
}
catch
(
const
std
::
runtime_error
&
e
)
{
FormatError
(
e
,
"
\"
%s
\"
[%s] failed to play"
,
FormatError
(
e
,
"
\"
%s
\"
[%s] failed to play"
,
name
,
plugin
.
name
);
name
,
plugin
.
name
);
...
...
src/output/Wrapper.hxx
View file @
d9cb85df
...
@@ -30,11 +30,9 @@ struct AudioOutputWrapper {
...
@@ -30,11 +30,9 @@ struct AudioOutputWrapper {
return
ContainerCast
(
ao
,
&
T
::
base
);
return
ContainerCast
(
ao
,
&
T
::
base
);
}
}
static
AudioOutput
*
Init
(
const
ConfigBlock
&
block
,
Error
&
error
)
{
static
AudioOutput
*
Init
(
const
ConfigBlock
&
block
)
{
T
*
t
=
T
::
Create
(
block
,
error
);
T
*
t
=
T
::
Create
(
block
);
return
t
!=
nullptr
return
&
t
->
base
;
?
&
t
->
base
:
nullptr
;
}
}
static
void
Finish
(
AudioOutput
*
ao
)
{
static
void
Finish
(
AudioOutput
*
ao
)
{
...
@@ -42,9 +40,9 @@ struct AudioOutputWrapper {
...
@@ -42,9 +40,9 @@ struct AudioOutputWrapper {
delete
t
;
delete
t
;
}
}
static
bool
Enable
(
AudioOutput
*
ao
,
Error
&
error
)
{
static
void
Enable
(
AudioOutput
*
ao
)
{
T
&
t
=
Cast
(
*
ao
);
T
&
t
=
Cast
(
*
ao
);
return
t
.
Enable
(
error
);
t
.
Enable
(
);
}
}
static
void
Disable
(
AudioOutput
*
ao
)
{
static
void
Disable
(
AudioOutput
*
ao
)
{
...
@@ -52,10 +50,9 @@ struct AudioOutputWrapper {
...
@@ -52,10 +50,9 @@ struct AudioOutputWrapper {
t
.
Disable
();
t
.
Disable
();
}
}
static
bool
Open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
static
void
Open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
)
{
Error
&
error
)
{
T
&
t
=
Cast
(
*
ao
);
T
&
t
=
Cast
(
*
ao
);
return
t
.
Open
(
audio_format
,
error
);
t
.
Open
(
audio_format
);
}
}
static
void
Close
(
AudioOutput
*
ao
)
{
static
void
Close
(
AudioOutput
*
ao
)
{
...
@@ -75,10 +72,9 @@ struct AudioOutputWrapper {
...
@@ -75,10 +72,9 @@ struct AudioOutputWrapper {
t
.
SendTag
(
tag
);
t
.
SendTag
(
tag
);
}
}
static
size_t
Play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
static
size_t
Play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
)
{
Error
&
error
)
{
T
&
t
=
Cast
(
*
ao
);
T
&
t
=
Cast
(
*
ao
);
return
t
.
Play
(
chunk
,
size
,
error
);
return
t
.
Play
(
chunk
,
size
);
}
}
static
void
Drain
(
AudioOutput
*
ao
)
{
static
void
Drain
(
AudioOutput
*
ao
)
{
...
...
src/output/plugins/AlsaOutputPlugin.cxx
View file @
d9cb85df
...
@@ -133,15 +133,15 @@ struct AlsaOutput {
...
@@ -133,15 +133,15 @@ struct AlsaOutput {
return
device
.
empty
()
?
default_device
:
device
.
c_str
();
return
device
.
empty
()
?
default_device
:
device
.
c_str
();
}
}
static
AlsaOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
AlsaOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Enable
(
Error
&
error
);
void
Enable
(
);
void
Disable
();
void
Disable
();
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Drain
();
void
Drain
();
void
Cancel
();
void
Cancel
();
...
@@ -195,16 +195,15 @@ AlsaOutput::AlsaOutput(const ConfigBlock &block)
...
@@ -195,16 +195,15 @@ AlsaOutput::AlsaOutput(const ConfigBlock &block)
}
}
inline
AlsaOutput
*
inline
AlsaOutput
*
AlsaOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
AlsaOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
AlsaOutput
(
block
);
return
new
AlsaOutput
(
block
);
}
}
inline
bool
inline
void
AlsaOutput
::
Enable
(
gcc_unused
Error
&
error
)
AlsaOutput
::
Enable
()
{
{
pcm_export
.
Construct
();
pcm_export
.
Construct
();
return
true
;
}
}
inline
void
inline
void
...
@@ -719,8 +718,8 @@ AlsaOutput::SetupOrDop(AudioFormat &audio_format, PcmExport::Params ¶ms)
...
@@ -719,8 +718,8 @@ AlsaOutput::SetupOrDop(AudioFormat &audio_format, PcmExport::Params ¶ms)
#endif
#endif
}
}
inline
bool
inline
void
AlsaOutput
::
Open
(
AudioFormat
&
audio_format
,
gcc_unused
Error
&
error
)
AlsaOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
int
err
=
snd_pcm_open
(
&
pcm
,
GetDevice
(),
int
err
=
snd_pcm_open
(
&
pcm
,
GetDevice
(),
SND_PCM_STREAM_PLAYBACK
,
mode
);
SND_PCM_STREAM_PLAYBACK
,
mode
);
...
@@ -751,8 +750,6 @@ AlsaOutput::Open(AudioFormat &audio_format, gcc_unused Error &error)
...
@@ -751,8 +750,6 @@ AlsaOutput::Open(AudioFormat &audio_format, gcc_unused Error &error)
out_frame_size
=
pcm_export
->
GetFrameSize
(
audio_format
);
out_frame_size
=
pcm_export
->
GetFrameSize
(
audio_format
);
must_prepare
=
false
;
must_prepare
=
false
;
return
true
;
}
}
inline
int
inline
int
...
@@ -832,7 +829,7 @@ AlsaOutput::Close()
...
@@ -832,7 +829,7 @@ AlsaOutput::Close()
}
}
inline
size_t
inline
size_t
AlsaOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
gcc_unused
Error
&
error
)
AlsaOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
assert
(
size
>
0
);
assert
(
size
>
0
);
assert
(
size
%
in_frame_size
==
0
);
assert
(
size
%
in_frame_size
==
0
);
...
...
src/output/plugins/AoOutputPlugin.cxx
View file @
d9cb85df
...
@@ -121,7 +121,7 @@ AoOutput::AoOutput(const ConfigBlock &block)
...
@@ -121,7 +121,7 @@ AoOutput::AoOutput(const ConfigBlock &block)
}
}
static
AudioOutput
*
static
AudioOutput
*
ao_output_init
(
const
ConfigBlock
&
block
,
gcc_unused
Error
&
error
)
ao_output_init
(
const
ConfigBlock
&
block
)
{
{
return
&
(
new
AoOutput
(
block
))
->
base
;
return
&
(
new
AoOutput
(
block
))
->
base
;
}
}
...
@@ -148,9 +148,8 @@ ao_output_close(AudioOutput *ao)
...
@@ -148,9 +148,8 @@ ao_output_close(AudioOutput *ao)
ao_close
(
ad
->
device
);
ao_close
(
ad
->
device
);
}
}
static
bool
static
void
ao_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
ao_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
)
gcc_unused
Error
&
error
)
{
{
ao_sample_format
format
=
OUR_AO_FORMAT_INITIALIZER
;
ao_sample_format
format
=
OUR_AO_FORMAT_INITIALIZER
;
AoOutput
*
ad
=
(
AoOutput
*
)
ao
;
AoOutput
*
ad
=
(
AoOutput
*
)
ao
;
...
@@ -181,8 +180,6 @@ ao_output_open(AudioOutput *ao, AudioFormat &audio_format,
...
@@ -181,8 +180,6 @@ ao_output_open(AudioOutput *ao, AudioFormat &audio_format,
if
(
ad
->
device
==
nullptr
)
if
(
ad
->
device
==
nullptr
)
throw
MakeAoError
();
throw
MakeAoError
();
return
true
;
}
}
/**
/**
...
@@ -203,8 +200,7 @@ static int ao_play_deconst(ao_device *device, const void *output_samples,
...
@@ -203,8 +200,7 @@ static int ao_play_deconst(ao_device *device, const void *output_samples,
}
}
static
size_t
static
size_t
ao_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
ao_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
)
gcc_unused
Error
&
error
)
{
{
AoOutput
*
ad
=
(
AoOutput
*
)
ao
;
AoOutput
*
ad
=
(
AoOutput
*
)
ao
;
...
...
src/output/plugins/FifoOutputPlugin.cxx
View file @
d9cb85df
...
@@ -54,7 +54,7 @@ public:
...
@@ -54,7 +54,7 @@ public:
CloseFifo
();
CloseFifo
();
}
}
static
FifoOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
FifoOutput
*
Create
(
const
ConfigBlock
&
block
);
void
Create
();
void
Create
();
void
Check
();
void
Check
();
...
@@ -63,11 +63,11 @@ public:
...
@@ -63,11 +63,11 @@ public:
void
OpenFifo
();
void
OpenFifo
();
void
CloseFifo
();
void
CloseFifo
();
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
unsigned
Delay
()
const
;
unsigned
Delay
()
const
;
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
};
};
...
@@ -169,16 +169,15 @@ try {
...
@@ -169,16 +169,15 @@ try {
}
}
inline
FifoOutput
*
inline
FifoOutput
*
FifoOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
FifoOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
FifoOutput
(
block
);
return
new
FifoOutput
(
block
);
}
}
bool
void
FifoOutput
::
Open
(
AudioFormat
&
audio_format
,
gcc_unused
Error
&
error
)
FifoOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
timer
=
new
Timer
(
audio_format
);
timer
=
new
Timer
(
audio_format
);
return
true
;
}
}
void
void
...
@@ -214,7 +213,7 @@ FifoOutput::Delay() const
...
@@ -214,7 +213,7 @@ FifoOutput::Delay() const
}
}
inline
size_t
inline
size_t
FifoOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
FifoOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
if
(
!
timer
->
IsStarted
())
if
(
!
timer
->
IsStarted
())
timer
->
Start
();
timer
->
Start
();
...
...
src/output/plugins/HaikuOutputPlugin.cxx
View file @
d9cb85df
...
@@ -71,12 +71,12 @@ public:
...
@@ -71,12 +71,12 @@ public:
~
HaikuOutput
();
~
HaikuOutput
();
static
HaikuOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
HaikuOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
size_t
Delay
();
size_t
Delay
();
...
@@ -119,7 +119,7 @@ haiku_test_default_device(void)
...
@@ -119,7 +119,7 @@ haiku_test_default_device(void)
}
}
inline
HaikuOutput
*
inline
HaikuOutput
*
HaikuOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
HaikuOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
initialize_application
();
initialize_application
();
...
@@ -184,8 +184,8 @@ HaikuOutput::FillBuffer(void* _buffer, size_t size,
...
@@ -184,8 +184,8 @@ HaikuOutput::FillBuffer(void* _buffer, size_t size,
}
}
}
}
inline
bool
inline
void
HaikuOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
HaikuOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
status_t
err
;
status_t
err
;
format
=
media_multi_audio_format
::
wildcard
;
format
=
media_multi_audio_format
::
wildcard
;
...
@@ -261,12 +261,10 @@ HaikuOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -261,12 +261,10 @@ HaikuOutput::Open(AudioFormat &audio_format, Error &)
sound_player
->
SetVolume
(
1.0
);
sound_player
->
SetVolume
(
1.0
);
sound_player
->
Start
();
sound_player
->
Start
();
sound_player
->
SetHasData
(
false
);
sound_player
->
SetHasData
(
false
);
return
true
;
}
}
inline
size_t
inline
size_t
HaikuOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
gcc_unused
Error
&
error
)
HaikuOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
BSoundPlayer
*
const
soundPlayer
=
sound_player
;
BSoundPlayer
*
const
soundPlayer
=
sound_player
;
const
uint8
*
data
=
(
const
uint8
*
)
chunk
;
const
uint8
*
data
=
(
const
uint8
*
)
chunk
;
...
...
src/output/plugins/JackOutputPlugin.cxx
View file @
d9cb85df
...
@@ -99,10 +99,10 @@ struct JackOutput {
...
@@ -99,10 +99,10 @@ struct JackOutput {
shutdown
=
true
;
shutdown
=
true
;
}
}
bool
Enable
(
Error
&
error
);
void
Enable
(
);
void
Disable
();
void
Disable
();
bool
Open
(
AudioFormat
&
new_audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
new_audio_format
);
void
Close
()
{
void
Close
()
{
Stop
();
Stop
();
...
@@ -134,7 +134,7 @@ struct JackOutput {
...
@@ -134,7 +134,7 @@ struct JackOutput {
:
0
;
:
0
;
}
}
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
bool
Pause
();
bool
Pause
();
};
};
...
@@ -420,14 +420,13 @@ mpd_jack_test_default_device(void)
...
@@ -420,14 +420,13 @@ mpd_jack_test_default_device(void)
return
true
;
return
true
;
}
}
inline
bool
inline
void
JackOutput
::
Enable
(
Error
&
)
JackOutput
::
Enable
()
{
{
for
(
unsigned
i
=
0
;
i
<
num_source_ports
;
++
i
)
for
(
unsigned
i
=
0
;
i
<
num_source_ports
;
++
i
)
ringbuffer
[
i
]
=
nullptr
;
ringbuffer
[
i
]
=
nullptr
;
Connect
();
Connect
();
return
true
;
}
}
inline
void
inline
void
...
@@ -445,7 +444,7 @@ JackOutput::Disable()
...
@@ -445,7 +444,7 @@ JackOutput::Disable()
}
}
static
AudioOutput
*
static
AudioOutput
*
mpd_jack_init
(
const
ConfigBlock
&
block
,
Error
&
)
mpd_jack_init
(
const
ConfigBlock
&
block
)
{
{
jack_set_error_function
(
mpd_jack_error
);
jack_set_error_function
(
mpd_jack_error
);
...
@@ -580,8 +579,8 @@ JackOutput::Start()
...
@@ -580,8 +579,8 @@ JackOutput::Start()
}
}
}
}
inline
bool
inline
void
JackOutput
::
Open
(
AudioFormat
&
new_audio_format
,
Error
&
)
JackOutput
::
Open
(
AudioFormat
&
new_audio_format
)
{
{
pause
=
false
;
pause
=
false
;
...
@@ -595,7 +594,6 @@ JackOutput::Open(AudioFormat &new_audio_format, Error &)
...
@@ -595,7 +594,6 @@ JackOutput::Open(AudioFormat &new_audio_format, Error &)
audio_format
=
new_audio_format
;
audio_format
=
new_audio_format
;
Start
();
Start
();
return
true
;
}
}
inline
size_t
inline
size_t
...
@@ -640,7 +638,7 @@ JackOutput::WriteSamples(const float *src, size_t n_frames)
...
@@ -640,7 +638,7 @@ JackOutput::WriteSamples(const float *src, size_t n_frames)
}
}
inline
size_t
inline
size_t
JackOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
JackOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
pause
=
false
;
pause
=
false
;
...
...
src/output/plugins/NullOutputPlugin.cxx
View file @
d9cb85df
...
@@ -37,13 +37,11 @@ public:
...
@@ -37,13 +37,11 @@ public:
:
base
(
null_output_plugin
,
block
),
:
base
(
null_output_plugin
,
block
),
sync
(
block
.
GetBlockValue
(
"sync"
,
true
))
{}
sync
(
block
.
GetBlockValue
(
"sync"
,
true
))
{}
static
NullOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
NullOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
gcc_unused
Error
&
error
)
{
void
Open
(
AudioFormat
&
audio_format
)
{
if
(
sync
)
if
(
sync
)
timer
=
new
Timer
(
audio_format
);
timer
=
new
Timer
(
audio_format
);
return
true
;
}
}
void
Close
()
{
void
Close
()
{
...
@@ -57,8 +55,7 @@ public:
...
@@ -57,8 +55,7 @@ public:
:
0
;
:
0
;
}
}
size_t
Play
(
gcc_unused
const
void
*
chunk
,
size_t
size
,
size_t
Play
(
gcc_unused
const
void
*
chunk
,
size_t
size
)
{
gcc_unused
Error
&
error
)
{
if
(
sync
)
{
if
(
sync
)
{
if
(
!
timer
->
IsStarted
())
if
(
!
timer
->
IsStarted
())
timer
->
Start
();
timer
->
Start
();
...
@@ -75,7 +72,7 @@ public:
...
@@ -75,7 +72,7 @@ public:
};
};
inline
NullOutput
*
inline
NullOutput
*
NullOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
NullOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
NullOutput
(
block
);
return
new
NullOutput
(
block
);
}
}
...
...
src/output/plugins/OSXOutputPlugin.cxx
View file @
d9cb85df
...
@@ -104,7 +104,7 @@ OSXOutput::OSXOutput(const ConfigBlock &block)
...
@@ -104,7 +104,7 @@ OSXOutput::OSXOutput(const ConfigBlock &block)
}
}
static
AudioOutput
*
static
AudioOutput
*
osx_output_init
(
const
ConfigBlock
&
block
,
Error
&
)
osx_output_init
(
const
ConfigBlock
&
block
)
{
{
OSXOutput
*
oo
=
new
OSXOutput
(
block
);
OSXOutput
*
oo
=
new
OSXOutput
(
block
);
...
@@ -512,8 +512,8 @@ osx_render(void *vdata,
...
@@ -512,8 +512,8 @@ osx_render(void *vdata,
return
noErr
;
return
noErr
;
}
}
static
bool
static
void
osx_output_enable
(
AudioOutput
*
ao
,
Error
&
)
osx_output_enable
(
AudioOutput
*
ao
)
{
{
char
errormsg
[
1024
];
char
errormsg
[
1024
];
OSXOutput
*
oo
=
(
OSXOutput
*
)
ao
;
OSXOutput
*
oo
=
(
OSXOutput
*
)
ao
;
...
@@ -546,8 +546,6 @@ osx_output_enable(AudioOutput *ao, Error &)
...
@@ -546,8 +546,6 @@ osx_output_enable(AudioOutput *ao, Error &)
if
(
oo
->
hog_device
)
{
if
(
oo
->
hog_device
)
{
osx_output_hog_device
(
oo
->
dev_id
,
true
);
osx_output_hog_device
(
oo
->
dev_id
,
true
);
}
}
return
true
;
}
}
static
void
static
void
...
@@ -573,9 +571,8 @@ osx_output_close(AudioOutput *ao)
...
@@ -573,9 +571,8 @@ osx_output_close(AudioOutput *ao)
delete
od
->
ring_buffer
;
delete
od
->
ring_buffer
;
}
}
static
bool
static
void
osx_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
osx_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
)
Error
&
)
{
{
char
errormsg
[
1024
];
char
errormsg
[
1024
];
OSXOutput
*
od
=
(
OSXOutput
*
)
ao
;
OSXOutput
*
od
=
(
OSXOutput
*
)
ao
;
...
@@ -662,13 +659,10 @@ osx_output_open(AudioOutput *ao, AudioFormat &audio_format,
...
@@ -662,13 +659,10 @@ osx_output_open(AudioOutput *ao, AudioFormat &audio_format,
throw
FormatRuntimeError
(
"unable to start audio output: %s"
,
throw
FormatRuntimeError
(
"unable to start audio output: %s"
,
errormsg
);
errormsg
);
}
}
return
true
;
}
}
static
size_t
static
size_t
osx_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
osx_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
)
gcc_unused
Error
&
error
)
{
{
OSXOutput
*
od
=
(
OSXOutput
*
)
ao
;
OSXOutput
*
od
=
(
OSXOutput
*
)
ao
;
return
od
->
ring_buffer
->
push
((
uint8_t
*
)
chunk
,
size
);
return
od
->
ring_buffer
->
push
((
uint8_t
*
)
chunk
,
size
);
...
...
src/output/plugins/OpenALOutputPlugin.cxx
View file @
d9cb85df
...
@@ -52,10 +52,9 @@ class OpenALOutput {
...
@@ -52,10 +52,9 @@ class OpenALOutput {
OpenALOutput
(
const
ConfigBlock
&
block
);
OpenALOutput
(
const
ConfigBlock
&
block
);
static
OpenALOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
OpenALOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
gcc_pure
gcc_pure
...
@@ -68,7 +67,7 @@ class OpenALOutput {
...
@@ -68,7 +67,7 @@ class OpenALOutput {
:
50
;
:
50
;
}
}
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
...
@@ -147,13 +146,13 @@ OpenALOutput::OpenALOutput(const ConfigBlock &block)
...
@@ -147,13 +146,13 @@ OpenALOutput::OpenALOutput(const ConfigBlock &block)
}
}
inline
OpenALOutput
*
inline
OpenALOutput
*
OpenALOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
OpenALOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
OpenALOutput
(
block
);
return
new
OpenALOutput
(
block
);
}
}
inline
bool
inline
void
OpenALOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
OpenALOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
format
=
openal_audio_format
(
audio_format
);
format
=
openal_audio_format
(
audio_format
);
...
@@ -174,8 +173,6 @@ OpenALOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -174,8 +173,6 @@ OpenALOutput::Open(AudioFormat &audio_format, Error &)
filled
=
0
;
filled
=
0
;
frequency
=
audio_format
.
sample_rate
;
frequency
=
audio_format
.
sample_rate
;
return
true
;
}
}
inline
void
inline
void
...
@@ -189,7 +186,7 @@ OpenALOutput::Close()
...
@@ -189,7 +186,7 @@ OpenALOutput::Close()
}
}
inline
size_t
inline
size_t
OpenALOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
gcc_unused
Error
&
error
)
OpenALOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
if
(
alcGetCurrentContext
()
!=
context
)
if
(
alcGetCurrentContext
()
!=
context
)
alcMakeContextCurrent
(
context
);
alcMakeContextCurrent
(
context
);
...
...
src/output/plugins/OssOutputPlugin.cxx
View file @
d9cb85df
...
@@ -89,12 +89,11 @@ public:
...
@@ -89,12 +89,11 @@ public:
:
base
(
oss_output_plugin
,
block
),
:
base
(
oss_output_plugin
,
block
),
fd
(
-
1
),
device
(
_device
)
{}
fd
(
-
1
),
device
(
_device
)
{}
static
OssOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
OssOutput
*
Create
(
const
ConfigBlock
&
block
);
#ifdef AFMT_S24_PACKED
#ifdef AFMT_S24_PACKED
bool
Enable
(
gcc_unused
Error
&
error
)
{
void
Enable
(
)
{
pcm_export
.
Construct
();
pcm_export
.
Construct
();
return
true
;
}
}
void
Disable
()
{
void
Disable
()
{
...
@@ -102,13 +101,13 @@ public:
...
@@ -102,13 +101,13 @@ public:
}
}
#endif
#endif
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
()
{
void
Close
()
{
DoClose
();
DoClose
();
}
}
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
private
:
private
:
...
@@ -227,7 +226,7 @@ oss_open_default()
...
@@ -227,7 +226,7 @@ oss_open_default()
}
}
inline
OssOutput
*
inline
OssOutput
*
OssOutput
::
Create
(
const
ConfigBlock
&
block
,
gcc_unused
Error
&
error
)
OssOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
const
char
*
device
=
block
.
GetBlockValue
(
"device"
);
const
char
*
device
=
block
.
GetBlockValue
(
"device"
);
if
(
device
!=
nullptr
)
if
(
device
!=
nullptr
)
...
@@ -638,8 +637,8 @@ try {
...
@@ -638,8 +637,8 @@ try {
throw
;
throw
;
}
}
inline
bool
inline
void
OssOutput
::
Open
(
AudioFormat
&
_audio_format
,
Error
&
)
OssOutput
::
Open
(
AudioFormat
&
_audio_format
)
try
{
try
{
fd
=
open_cloexec
(
device
,
O_WRONLY
,
0
);
fd
=
open_cloexec
(
device
,
O_WRONLY
,
0
);
if
(
fd
<
0
)
if
(
fd
<
0
)
...
@@ -648,7 +647,6 @@ try {
...
@@ -648,7 +647,6 @@ try {
Setup
(
_audio_format
);
Setup
(
_audio_format
);
audio_format
=
_audio_format
;
audio_format
=
_audio_format
;
return
true
;
}
catch
(...)
{
}
catch
(...)
{
DoClose
();
DoClose
();
throw
;
throw
;
...
@@ -664,7 +662,7 @@ OssOutput::Cancel()
...
@@ -664,7 +662,7 @@ OssOutput::Cancel()
}
}
inline
size_t
inline
size_t
OssOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
OssOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
ssize_t
ret
;
ssize_t
ret
;
...
...
src/output/plugins/PipeOutputPlugin.cxx
View file @
d9cb85df
...
@@ -39,15 +39,15 @@ class PipeOutput {
...
@@ -39,15 +39,15 @@ class PipeOutput {
PipeOutput
(
const
ConfigBlock
&
block
);
PipeOutput
(
const
ConfigBlock
&
block
);
public
:
public
:
static
PipeOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
PipeOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
()
{
void
Close
()
{
pclose
(
fh
);
pclose
(
fh
);
}
}
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
};
};
PipeOutput
::
PipeOutput
(
const
ConfigBlock
&
block
)
PipeOutput
::
PipeOutput
(
const
ConfigBlock
&
block
)
...
@@ -59,23 +59,21 @@ PipeOutput::PipeOutput(const ConfigBlock &block)
...
@@ -59,23 +59,21 @@ PipeOutput::PipeOutput(const ConfigBlock &block)
}
}
inline
PipeOutput
*
inline
PipeOutput
*
PipeOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
PipeOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
PipeOutput
(
block
);
return
new
PipeOutput
(
block
);
}
}
inline
bool
inline
void
PipeOutput
::
Open
(
gcc_unused
AudioFormat
&
audio_format
,
Error
&
)
PipeOutput
::
Open
(
gcc_unused
AudioFormat
&
audio_format
)
{
{
fh
=
popen
(
cmd
.
c_str
(),
"w"
);
fh
=
popen
(
cmd
.
c_str
(),
"w"
);
if
(
fh
==
nullptr
)
if
(
fh
==
nullptr
)
throw
FormatErrno
(
"Error opening pipe
\"
%s
\"
"
,
cmd
.
c_str
());
throw
FormatErrno
(
"Error opening pipe
\"
%s
\"
"
,
cmd
.
c_str
());
return
true
;
}
}
inline
size_t
inline
size_t
PipeOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
PipeOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
size_t
nbytes
=
fwrite
(
chunk
,
1
,
size
,
fh
);
size_t
nbytes
=
fwrite
(
chunk
,
1
,
size
,
fh
);
if
(
nbytes
==
0
)
if
(
nbytes
==
0
)
...
...
src/output/plugins/PulseOutputPlugin.cxx
View file @
d9cb85df
...
@@ -93,16 +93,16 @@ public:
...
@@ -93,16 +93,16 @@ public:
gcc_const
gcc_const
static
bool
TestDefaultDevice
();
static
bool
TestDefaultDevice
();
static
PulseOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
PulseOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Enable
(
Error
&
error
);
void
Enable
(
);
void
Disable
();
void
Disable
();
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
unsigned
Delay
();
unsigned
Delay
();
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
bool
Pause
();
bool
Pause
();
...
@@ -415,13 +415,13 @@ PulseOutput::SetupContext()
...
@@ -415,13 +415,13 @@ PulseOutput::SetupContext()
}
}
PulseOutput
*
PulseOutput
*
PulseOutput
::
Create
(
const
ConfigBlock
&
block
,
gcc_unused
Error
&
error
)
PulseOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
PulseOutput
(
block
);
return
new
PulseOutput
(
block
);
}
}
inline
bool
inline
void
PulseOutput
::
Enable
(
gcc_unused
Error
&
error
)
PulseOutput
::
Enable
()
{
{
assert
(
mainloop
==
nullptr
);
assert
(
mainloop
==
nullptr
);
...
@@ -454,8 +454,6 @@ PulseOutput::Enable(gcc_unused Error &error)
...
@@ -454,8 +454,6 @@ PulseOutput::Enable(gcc_unused Error &error)
}
}
pa_threaded_mainloop_unlock
(
mainloop
);
pa_threaded_mainloop_unlock
(
mainloop
);
return
true
;
}
}
inline
void
inline
void
...
@@ -607,8 +605,8 @@ PulseOutput::SetupStream(const pa_sample_spec &ss)
...
@@ -607,8 +605,8 @@ PulseOutput::SetupStream(const pa_sample_spec &ss)
pulse_output_stream_write_cb
,
this
);
pulse_output_stream_write_cb
,
this
);
}
}
inline
bool
inline
void
PulseOutput
::
Open
(
AudioFormat
&
audio_format
,
gcc_unused
Error
&
error
)
PulseOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
assert
(
mainloop
!=
nullptr
);
assert
(
mainloop
!=
nullptr
);
...
@@ -676,8 +674,6 @@ PulseOutput::Open(AudioFormat &audio_format, gcc_unused Error &error)
...
@@ -676,8 +674,6 @@ PulseOutput::Open(AudioFormat &audio_format, gcc_unused Error &error)
throw
MakePulseError
(
context
,
throw
MakePulseError
(
context
,
"pa_stream_connect_playback() has failed"
);
"pa_stream_connect_playback() has failed"
);
}
}
return
true
;
}
}
inline
void
inline
void
...
@@ -759,7 +755,7 @@ PulseOutput::Delay()
...
@@ -759,7 +755,7 @@ PulseOutput::Delay()
}
}
inline
size_t
inline
size_t
PulseOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
gcc_unused
Error
&
error
)
PulseOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
assert
(
mainloop
!=
nullptr
);
assert
(
mainloop
!=
nullptr
);
assert
(
stream
!=
nullptr
);
assert
(
stream
!=
nullptr
);
...
...
src/output/plugins/PulseOutputPlugin.hxx
View file @
d9cb85df
...
@@ -23,7 +23,6 @@
...
@@ -23,7 +23,6 @@
class
PulseOutput
;
class
PulseOutput
;
class
PulseMixer
;
class
PulseMixer
;
struct
pa_cvolume
;
struct
pa_cvolume
;
class
Error
;
extern
const
struct
AudioOutputPlugin
pulse_output_plugin
;
extern
const
struct
AudioOutputPlugin
pulse_output_plugin
;
...
...
src/output/plugins/RecorderOutputPlugin.cxx
View file @
d9cb85df
...
@@ -81,9 +81,9 @@ class RecorderOutput {
...
@@ -81,9 +81,9 @@ class RecorderOutput {
delete
prepared_encoder
;
delete
prepared_encoder
;
}
}
static
RecorderOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
RecorderOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
/**
/**
...
@@ -93,7 +93,7 @@ class RecorderOutput {
...
@@ -93,7 +93,7 @@ class RecorderOutput {
void
SendTag
(
const
Tag
&
tag
);
void
SendTag
(
const
Tag
&
tag
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
private
:
private
:
gcc_pure
gcc_pure
...
@@ -141,7 +141,7 @@ RecorderOutput::RecorderOutput(const ConfigBlock &block)
...
@@ -141,7 +141,7 @@ RecorderOutput::RecorderOutput(const ConfigBlock &block)
}
}
RecorderOutput
*
RecorderOutput
*
RecorderOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
RecorderOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
RecorderOutput
(
block
);
return
new
RecorderOutput
(
block
);
}
}
...
@@ -154,8 +154,8 @@ RecorderOutput::EncoderToFile()
...
@@ -154,8 +154,8 @@ RecorderOutput::EncoderToFile()
EncoderToOutputStream
(
*
file
,
*
encoder
);
EncoderToOutputStream
(
*
file
,
*
encoder
);
}
}
inline
bool
inline
void
RecorderOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
RecorderOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
/* create the output file */
/* create the output file */
...
@@ -195,8 +195,6 @@ RecorderOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -195,8 +195,6 @@ RecorderOutput::Open(AudioFormat &audio_format, Error &)
soon as we have received a tag */
soon as we have received a tag */
delete
encoder
;
delete
encoder
;
}
}
return
true
;
}
}
inline
void
inline
void
...
@@ -349,7 +347,7 @@ RecorderOutput::SendTag(const Tag &tag)
...
@@ -349,7 +347,7 @@ RecorderOutput::SendTag(const Tag &tag)
}
}
inline
size_t
inline
size_t
RecorderOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
RecorderOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
if
(
file
==
nullptr
)
{
if
(
file
==
nullptr
)
{
/* not currently encoding to a file; discard incoming
/* not currently encoding to a file; discard incoming
...
...
src/output/plugins/RoarOutputPlugin.cxx
View file @
d9cb85df
...
@@ -58,11 +58,11 @@ public:
...
@@ -58,11 +58,11 @@ public:
return
&
base
;
return
&
base
;
}
}
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
void
SendTag
(
const
Tag
&
tag
);
void
SendTag
(
const
Tag
&
tag
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
int
GetVolume
()
const
;
int
GetVolume
()
const
;
...
@@ -134,7 +134,7 @@ roar_output_set_volume(RoarOutput &roar, unsigned volume)
...
@@ -134,7 +134,7 @@ roar_output_set_volume(RoarOutput &roar, unsigned volume)
}
}
static
AudioOutput
*
static
AudioOutput
*
roar_init
(
const
ConfigBlock
&
block
,
Error
&
)
roar_init
(
const
ConfigBlock
&
block
)
{
{
return
*
new
RoarOutput
(
block
);
return
*
new
RoarOutput
(
block
);
}
}
...
@@ -174,8 +174,8 @@ roar_use_audio_format(struct roar_audio_info *info,
...
@@ -174,8 +174,8 @@ roar_use_audio_format(struct roar_audio_info *info,
}
}
}
}
inline
bool
inline
void
RoarOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
RoarOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
const
ScopeLock
protect
(
mutex
);
const
ScopeLock
protect
(
mutex
);
...
@@ -196,7 +196,6 @@ RoarOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -196,7 +196,6 @@ RoarOutput::Open(AudioFormat &audio_format, Error &)
roar_vs_role
(
vss
,
role
,
&
err
);
roar_vs_role
(
vss
,
role
,
&
err
);
alive
=
true
;
alive
=
true
;
return
true
;
}
}
inline
void
inline
void
...
@@ -241,7 +240,7 @@ RoarOutput::Cancel()
...
@@ -241,7 +240,7 @@ RoarOutput::Cancel()
}
}
inline
size_t
inline
size_t
RoarOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
RoarOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
if
(
vss
==
nullptr
)
if
(
vss
==
nullptr
)
throw
std
::
runtime_error
(
"Connection is invalid"
);
throw
std
::
runtime_error
(
"Connection is invalid"
);
...
...
src/output/plugins/ShoutOutputPlugin.cxx
View file @
d9cb85df
...
@@ -58,14 +58,14 @@ struct ShoutOutput final {
...
@@ -58,14 +58,14 @@ struct ShoutOutput final {
explicit
ShoutOutput
(
const
ConfigBlock
&
block
);
explicit
ShoutOutput
(
const
ConfigBlock
&
block
);
~
ShoutOutput
();
~
ShoutOutput
();
static
ShoutOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
ShoutOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
unsigned
Delay
()
const
;
unsigned
Delay
()
const
;
void
SendTag
(
const
Tag
&
tag
);
void
SendTag
(
const
Tag
&
tag
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
bool
Pause
();
bool
Pause
();
};
};
...
@@ -246,7 +246,7 @@ ShoutOutput::~ShoutOutput()
...
@@ -246,7 +246,7 @@ ShoutOutput::~ShoutOutput()
}
}
ShoutOutput
*
ShoutOutput
*
ShoutOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
ShoutOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
if
(
shout_init_count
==
0
)
if
(
shout_init_count
==
0
)
shout_init
();
shout_init
();
...
@@ -340,8 +340,8 @@ shout_connect(ShoutOutput *sd)
...
@@ -340,8 +340,8 @@ shout_connect(ShoutOutput *sd)
}
}
}
}
bool
void
ShoutOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
ShoutOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
shout_connect
(
this
);
shout_connect
(
this
);
...
@@ -358,8 +358,6 @@ ShoutOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -358,8 +358,6 @@ ShoutOutput::Open(AudioFormat &audio_format, Error &)
shout_close
(
shout_conn
);
shout_close
(
shout_conn
);
throw
;
throw
;
}
}
return
true
;
}
}
unsigned
unsigned
...
@@ -373,7 +371,7 @@ ShoutOutput::Delay() const
...
@@ -373,7 +371,7 @@ ShoutOutput::Delay() const
}
}
size_t
size_t
ShoutOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
ShoutOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
encoder
->
Write
(
chunk
,
size
);
encoder
->
Write
(
chunk
,
size
);
write_page
(
this
);
write_page
(
this
);
...
...
src/output/plugins/SndioOutputPlugin.cxx
View file @
d9cb85df
...
@@ -47,14 +47,12 @@ class SndioOutput {
...
@@ -47,14 +47,12 @@ class SndioOutput {
public
:
public
:
SndioOutput
(
const
ConfigBlock
&
block
);
SndioOutput
(
const
ConfigBlock
&
block
);
bool
Configure
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
SndioOutput
*
Create
(
const
ConfigBlock
&
block
);
static
SndioOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Close
();
void
Close
();
unsigned
Delay
()
const
;
unsigned
Delay
()
const
;
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Cancel
();
void
Cancel
();
};
};
...
@@ -67,7 +65,7 @@ SndioOutput::SndioOutput(const ConfigBlock &block)
...
@@ -67,7 +65,7 @@ SndioOutput::SndioOutput(const ConfigBlock &block)
}
}
SndioOutput
*
SndioOutput
*
SndioOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
SndioOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
SndioOutput
(
block
);
return
new
SndioOutput
(
block
);
}
}
...
@@ -88,8 +86,8 @@ sndio_test_default_device()
...
@@ -88,8 +86,8 @@ sndio_test_default_device()
return
true
;
return
true
;
}
}
bool
void
SndioOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
SndioOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
struct
sio_par
par
;
struct
sio_par
par
;
unsigned
bits
,
rate
,
chans
;
unsigned
bits
,
rate
,
chans
;
...
@@ -145,8 +143,6 @@ SndioOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -145,8 +143,6 @@ SndioOutput::Open(AudioFormat &audio_format, Error &)
sio_close
(
sio_hdl
);
sio_close
(
sio_hdl
);
throw
std
::
runtime_error
(
"Failed to start audio device"
);
throw
std
::
runtime_error
(
"Failed to start audio device"
);
}
}
return
true
;
}
}
void
void
...
@@ -156,7 +152,7 @@ SndioOutput::Close()
...
@@ -156,7 +152,7 @@ SndioOutput::Close()
}
}
size_t
size_t
SndioOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
SndioOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
size_t
n
;
size_t
n
;
...
...
src/output/plugins/SolarisOutputPlugin.cxx
View file @
d9cb85df
...
@@ -72,7 +72,7 @@ solaris_output_test_default_device(void)
...
@@ -72,7 +72,7 @@ solaris_output_test_default_device(void)
}
}
static
AudioOutput
*
static
AudioOutput
*
solaris_output_init
(
const
ConfigBlock
&
block
,
Error
&
)
solaris_output_init
(
const
ConfigBlock
&
block
)
{
{
SolarisOutput
*
so
=
new
SolarisOutput
(
block
);
SolarisOutput
*
so
=
new
SolarisOutput
(
block
);
return
&
so
->
base
;
return
&
so
->
base
;
...
@@ -86,8 +86,8 @@ solaris_output_finish(AudioOutput *ao)
...
@@ -86,8 +86,8 @@ solaris_output_finish(AudioOutput *ao)
delete
so
;
delete
so
;
}
}
static
bool
static
void
solaris_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
Error
&
)
solaris_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
)
{
{
SolarisOutput
*
so
=
(
SolarisOutput
*
)
ao
;
SolarisOutput
*
so
=
(
SolarisOutput
*
)
ao
;
struct
audio_info
info
;
struct
audio_info
info
;
...
@@ -130,8 +130,6 @@ solaris_output_open(AudioOutput *ao, AudioFormat &audio_format, Error &)
...
@@ -130,8 +130,6 @@ solaris_output_open(AudioOutput *ao, AudioFormat &audio_format, Error &)
close
(
so
->
fd
);
close
(
so
->
fd
);
throw
MakeErrno
(
e
,
"AUDIO_SETINFO failed"
);
throw
MakeErrno
(
e
,
"AUDIO_SETINFO failed"
);
}
}
return
true
;
}
}
static
void
static
void
...
@@ -143,8 +141,7 @@ solaris_output_close(AudioOutput *ao)
...
@@ -143,8 +141,7 @@ solaris_output_close(AudioOutput *ao)
}
}
static
size_t
static
size_t
solaris_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
solaris_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
)
Error
&
)
{
{
SolarisOutput
*
so
=
(
SolarisOutput
*
)
ao
;
SolarisOutput
*
so
=
(
SolarisOutput
*
)
ao
;
ssize_t
nbytes
;
ssize_t
nbytes
;
...
...
src/output/plugins/WinmmOutputPlugin.cxx
View file @
d9cb85df
...
@@ -63,14 +63,14 @@ public:
...
@@ -63,14 +63,14 @@ public:
return
handle
;
return
handle
;
}
}
static
WinmmOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
)
{
static
WinmmOutput
*
Create
(
const
ConfigBlock
&
block
)
{
return
new
WinmmOutput
(
block
);
return
new
WinmmOutput
(
block
);
}
}
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Drain
();
void
Drain
();
void
Cancel
();
void
Cancel
();
...
@@ -153,8 +153,8 @@ WinmmOutput::WinmmOutput(const ConfigBlock &block)
...
@@ -153,8 +153,8 @@ WinmmOutput::WinmmOutput(const ConfigBlock &block)
{
{
}
}
bool
void
WinmmOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
WinmmOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
event
=
CreateEvent
(
nullptr
,
false
,
false
,
nullptr
);
event
=
CreateEvent
(
nullptr
,
false
,
false
,
nullptr
);
if
(
event
==
nullptr
)
if
(
event
==
nullptr
)
...
@@ -199,8 +199,6 @@ WinmmOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -199,8 +199,6 @@ WinmmOutput::Open(AudioFormat &audio_format, Error &)
memset
(
&
i
.
hdr
,
0
,
sizeof
(
i
.
hdr
));
memset
(
&
i
.
hdr
,
0
,
sizeof
(
i
.
hdr
));
next_buffer
=
0
;
next_buffer
=
0
;
return
true
;
}
}
void
void
...
@@ -260,7 +258,7 @@ WinmmOutput::DrainBuffer(WinmmBuffer &buffer)
...
@@ -260,7 +258,7 @@ WinmmOutput::DrainBuffer(WinmmBuffer &buffer)
}
}
size_t
size_t
WinmmOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
WinmmOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
/* get the next buffer from the ring and prepare it */
/* get the next buffer from the ring and prepare it */
WinmmBuffer
*
buffer
=
&
buffers
[
next_buffer
];
WinmmBuffer
*
buffer
=
&
buffers
[
next_buffer
];
...
...
src/output/plugins/httpd/HttpdInternal.hxx
View file @
d9cb85df
...
@@ -178,7 +178,7 @@ public:
...
@@ -178,7 +178,7 @@ public:
/**
/**
* Caller must lock the mutex.
* Caller must lock the mutex.
*/
*/
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
/**
/**
* Caller must lock the mutex.
* Caller must lock the mutex.
...
...
src/output/plugins/httpd/HttpdOutputPlugin.cxx
View file @
d9cb85df
...
@@ -118,7 +118,7 @@ HttpdOutput::Unbind()
...
@@ -118,7 +118,7 @@ HttpdOutput::Unbind()
}
}
static
AudioOutput
*
static
AudioOutput
*
httpd_output_init
(
const
ConfigBlock
&
block
,
Error
&
)
httpd_output_init
(
const
ConfigBlock
&
block
)
{
{
return
*
new
HttpdOutput
(
io_thread_get
(),
block
);
return
*
new
HttpdOutput
(
io_thread_get
(),
block
);
}
}
...
@@ -247,13 +247,12 @@ HttpdOutput::ReadPage()
...
@@ -247,13 +247,12 @@ HttpdOutput::ReadPage()
return
Page
::
Copy
(
buffer
,
size
);
return
Page
::
Copy
(
buffer
,
size
);
}
}
static
bool
static
void
httpd_output_enable
(
AudioOutput
*
ao
,
gcc_unused
Error
&
error
)
httpd_output_enable
(
AudioOutput
*
ao
)
{
{
HttpdOutput
*
httpd
=
HttpdOutput
::
Cast
(
ao
);
HttpdOutput
*
httpd
=
HttpdOutput
::
Cast
(
ao
);
httpd
->
Bind
();
httpd
->
Bind
();
return
true
;
}
}
static
void
static
void
...
@@ -277,8 +276,8 @@ HttpdOutput::OpenEncoder(AudioFormat &audio_format)
...
@@ -277,8 +276,8 @@ HttpdOutput::OpenEncoder(AudioFormat &audio_format)
unflushed_input
=
0
;
unflushed_input
=
0
;
}
}
inline
bool
inline
void
HttpdOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
HttpdOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
assert
(
!
open
);
assert
(
!
open
);
assert
(
clients
.
empty
());
assert
(
clients
.
empty
());
...
@@ -290,18 +289,15 @@ HttpdOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -290,18 +289,15 @@ HttpdOutput::Open(AudioFormat &audio_format, Error &)
timer
=
new
Timer
(
audio_format
);
timer
=
new
Timer
(
audio_format
);
open
=
true
;
open
=
true
;
return
true
;
}
}
static
bool
static
void
httpd_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
,
httpd_output_open
(
AudioOutput
*
ao
,
AudioFormat
&
audio_format
)
Error
&
error
)
{
{
HttpdOutput
*
httpd
=
HttpdOutput
::
Cast
(
ao
);
HttpdOutput
*
httpd
=
HttpdOutput
::
Cast
(
ao
);
const
ScopeLock
protect
(
httpd
->
mutex
);
const
ScopeLock
protect
(
httpd
->
mutex
);
return
httpd
->
Open
(
audio_format
,
error
);
httpd
->
Open
(
audio_format
);
}
}
inline
void
inline
void
...
@@ -431,8 +427,7 @@ HttpdOutput::Play(const void *chunk, size_t size)
...
@@ -431,8 +427,7 @@ HttpdOutput::Play(const void *chunk, size_t size)
}
}
static
size_t
static
size_t
httpd_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
,
httpd_output_play
(
AudioOutput
*
ao
,
const
void
*
chunk
,
size_t
size
)
Error
&
)
{
{
HttpdOutput
*
httpd
=
HttpdOutput
::
Cast
(
ao
);
HttpdOutput
*
httpd
=
HttpdOutput
::
Cast
(
ao
);
...
...
src/output/plugins/sles/SlesOutputPlugin.cxx
View file @
d9cb85df
...
@@ -91,16 +91,16 @@ public:
...
@@ -91,16 +91,16 @@ public:
return
&
base
;
return
&
base
;
}
}
static
SlesOutput
*
Create
(
const
ConfigBlock
&
block
,
Error
&
error
);
static
SlesOutput
*
Create
(
const
ConfigBlock
&
block
);
bool
Open
(
AudioFormat
&
audio_format
,
Error
&
error
);
void
Open
(
AudioFormat
&
audio_format
);
void
Close
();
void
Close
();
unsigned
Delay
()
{
unsigned
Delay
()
{
return
pause
&&
!
cancel
?
100
:
0
;
return
pause
&&
!
cancel
?
100
:
0
;
}
}
size_t
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
error
);
size_t
Play
(
const
void
*
chunk
,
size_t
size
);
void
Drain
();
void
Drain
();
void
Cancel
();
void
Cancel
();
...
@@ -129,8 +129,8 @@ SlesOutput::SlesOutput(const ConfigBlock &block)
...
@@ -129,8 +129,8 @@ SlesOutput::SlesOutput(const ConfigBlock &block)
{
{
}
}
inline
bool
inline
void
SlesOutput
::
Open
(
AudioFormat
&
audio_format
,
Error
&
)
SlesOutput
::
Open
(
AudioFormat
&
audio_format
)
{
{
SLresult
result
;
SLresult
result
;
SLObjectItf
_object
;
SLObjectItf
_object
;
...
@@ -146,7 +146,6 @@ SlesOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -146,7 +146,6 @@ SlesOutput::Open(AudioFormat &audio_format, Error &)
if
(
result
!=
SL_RESULT_SUCCESS
)
{
if
(
result
!=
SL_RESULT_SUCCESS
)
{
engine_object
.
Destroy
();
engine_object
.
Destroy
();
throw
std
::
runtime_error
(
"Engine.Realize() failed"
);
throw
std
::
runtime_error
(
"Engine.Realize() failed"
);
return
false
;
}
}
SLEngineItf
_engine
;
SLEngineItf
_engine
;
...
@@ -294,7 +293,6 @@ SlesOutput::Open(AudioFormat &audio_format, Error &)
...
@@ -294,7 +293,6 @@ SlesOutput::Open(AudioFormat &audio_format, Error &)
// TODO: support other sample formats
// TODO: support other sample formats
audio_format
.
format
=
SampleFormat
::
S16
;
audio_format
.
format
=
SampleFormat
::
S16
;
return
true
;
}
}
inline
void
inline
void
...
@@ -307,7 +305,7 @@ SlesOutput::Close()
...
@@ -307,7 +305,7 @@ SlesOutput::Close()
}
}
inline
size_t
inline
size_t
SlesOutput
::
Play
(
const
void
*
chunk
,
size_t
size
,
Error
&
)
SlesOutput
::
Play
(
const
void
*
chunk
,
size_t
size
)
{
{
cancel
=
false
;
cancel
=
false
;
...
@@ -413,7 +411,7 @@ sles_test_default_device()
...
@@ -413,7 +411,7 @@ sles_test_default_device()
}
}
inline
SlesOutput
*
inline
SlesOutput
*
SlesOutput
::
Create
(
const
ConfigBlock
&
block
,
Error
&
)
SlesOutput
::
Create
(
const
ConfigBlock
&
block
)
{
{
return
new
SlesOutput
(
block
);
return
new
SlesOutput
(
block
);
}
}
...
...
src/player/Control.cxx
View file @
d9cb85df
...
@@ -21,7 +21,6 @@
...
@@ -21,7 +21,6 @@
#include "Control.hxx"
#include "Control.hxx"
#include "Idle.hxx"
#include "Idle.hxx"
#include "DetachedSong.hxx"
#include "DetachedSong.hxx"
#include "util/Error.hxx"
#include <algorithm>
#include <algorithm>
...
@@ -172,15 +171,6 @@ PlayerControl::SetError(PlayerError type, std::exception_ptr &&_error)
...
@@ -172,15 +171,6 @@ PlayerControl::SetError(PlayerError type, std::exception_ptr &&_error)
}
}
void
void
PlayerControl
::
SetError
(
PlayerError
type
,
Error
&&
_error
)
{
assert
(
type
!=
PlayerError
::
NONE
);
assert
(
_error
.
IsDefined
());
SetError
(
type
,
std
::
make_exception_ptr
(
std
::
move
(
_error
)));
}
void
PlayerControl
::
LockClearError
()
PlayerControl
::
LockClearError
()
{
{
const
ScopeLock
protect
(
mutex
);
const
ScopeLock
protect
(
mutex
);
...
...
src/player/Control.hxx
View file @
d9cb85df
...
@@ -355,9 +355,7 @@ public:
...
@@ -355,9 +355,7 @@ public:
* Caller must lock the object.
* Caller must lock the object.
*
*
* @param type the error type; must not be #PlayerError::NONE
* @param type the error type; must not be #PlayerError::NONE
* @param error detailed error information; must be defined.
*/
*/
void
SetError
(
PlayerError
type
,
Error
&&
error
);
void
SetError
(
PlayerError
type
,
std
::
exception_ptr
&&
_error
);
void
SetError
(
PlayerError
type
,
std
::
exception_ptr
&&
_error
);
/**
/**
...
...
src/player/Thread.cxx
View file @
d9cb85df
...
@@ -33,7 +33,6 @@
...
@@ -33,7 +33,6 @@
#include "tag/Tag.hxx"
#include "tag/Tag.hxx"
#include "Idle.hxx"
#include "Idle.hxx"
#include "util/Domain.hxx"
#include "util/Domain.hxx"
#include "util/Error.hxx"
#include "thread/Name.hxx"
#include "thread/Name.hxx"
#include "Log.hxx"
#include "Log.hxx"
...
...
test/run_output.cxx
View file @
d9cb85df
...
@@ -32,7 +32,8 @@
...
@@ -32,7 +32,8 @@
#include "pcm/PcmConvert.hxx"
#include "pcm/PcmConvert.hxx"
#include "filter/FilterRegistry.hxx"
#include "filter/FilterRegistry.hxx"
#include "player/Control.hxx"
#include "player/Control.hxx"
#include "util/Error.hxx"
#include "util/RuntimeError.hxx"
#include "util/ScopeExit.hxx"
#include "Log.hxx"
#include "Log.hxx"
#include <assert.h>
#include <assert.h>
...
@@ -62,43 +63,29 @@ load_audio_output(EventLoop &event_loop, const char *name)
...
@@ -62,43 +63,29 @@ load_audio_output(EventLoop &event_loop, const char *name)
{
{
const
auto
*
param
=
config_find_block
(
ConfigBlockOption
::
AUDIO_OUTPUT
,
const
auto
*
param
=
config_find_block
(
ConfigBlockOption
::
AUDIO_OUTPUT
,
"name"
,
name
);
"name"
,
name
);
if
(
param
==
NULL
)
{
if
(
param
==
NULL
)
fprintf
(
stderr
,
"No such configured audio output: %s
\n
"
,
name
);
throw
FormatRuntimeError
(
"No such configured audio output: %s
\n
"
,
return
nullptr
;
name
);
}
static
struct
PlayerControl
dummy_player_control
(
*
(
PlayerListener
*
)
nullptr
,
static
struct
PlayerControl
dummy_player_control
(
*
(
PlayerListener
*
)
nullptr
,
*
(
MultipleOutputs
*
)
nullptr
,
*
(
MultipleOutputs
*
)
nullptr
,
32
,
4
);
32
,
4
);
Error
error
;
return
audio_output_new
(
event_loop
,
*
param
,
AudioOutput
*
ao
=
*
(
MixerListener
*
)
nullptr
,
audio_output_new
(
event_loop
,
*
param
,
dummy_player_control
);
*
(
MixerListener
*
)
nullptr
,
dummy_player_control
,
error
);
if
(
ao
==
nullptr
)
LogError
(
error
);
return
ao
;
}
}
static
bool
static
void
run_output
(
AudioOutput
*
ao
,
AudioFormat
audio_format
)
run_output
(
AudioOutput
*
ao
,
AudioFormat
audio_format
)
{
{
/* open the audio output */
/* open the audio output */
Error
error
;
ao_plugin_enable
(
ao
);
if
(
!
ao_plugin_enable
(
ao
,
error
))
{
AtScopeExit
(
ao
)
{
ao_plugin_disable
(
ao
);
};
LogError
(
error
,
"Failed to enable audio output"
);
return
false
;
}
if
(
!
ao_plugin_open
(
ao
,
audio_format
,
error
))
{
ao_plugin_open
(
ao
,
audio_format
);
ao_plugin_disable
(
ao
);
AtScopeExit
(
ao
)
{
ao_plugin_close
(
ao
);
};
LogError
(
error
,
"Failed to open audio output"
);
return
false
;
}
struct
audio_format_string
af_string
;
struct
audio_format_string
af_string
;
fprintf
(
stderr
,
"audio_format=%s
\n
"
,
fprintf
(
stderr
,
"audio_format=%s
\n
"
,
...
@@ -123,14 +110,7 @@ run_output(AudioOutput *ao, AudioFormat audio_format)
...
@@ -123,14 +110,7 @@ run_output(AudioOutput *ao, AudioFormat audio_format)
size_t
play_length
=
(
length
/
frame_size
)
*
frame_size
;
size_t
play_length
=
(
length
/
frame_size
)
*
frame_size
;
if
(
play_length
>
0
)
{
if
(
play_length
>
0
)
{
size_t
consumed
=
ao_plugin_play
(
ao
,
size_t
consumed
=
ao_plugin_play
(
ao
,
buffer
,
play_length
,
buffer
,
play_length
);
error
);
if
(
consumed
==
0
)
{
ao_plugin_close
(
ao
);
ao_plugin_disable
(
ao
);
LogError
(
error
,
"Failed to play"
);
return
false
;
}
assert
(
consumed
<=
length
);
assert
(
consumed
<=
length
);
assert
(
consumed
%
frame_size
==
0
);
assert
(
consumed
%
frame_size
==
0
);
...
@@ -139,16 +119,10 @@ run_output(AudioOutput *ao, AudioFormat audio_format)
...
@@ -139,16 +119,10 @@ run_output(AudioOutput *ao, AudioFormat audio_format)
memmove
(
buffer
,
buffer
+
consumed
,
length
);
memmove
(
buffer
,
buffer
+
consumed
,
length
);
}
}
}
}
ao_plugin_close
(
ao
);
ao_plugin_disable
(
ao
);
return
true
;
}
}
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
try
{
try
{
Error
error
;
if
(
argc
<
3
||
argc
>
4
)
{
if
(
argc
<
3
||
argc
>
4
)
{
fprintf
(
stderr
,
"Usage: run_output CONFIG NAME [FORMAT] <IN
\n
"
);
fprintf
(
stderr
,
"Usage: run_output CONFIG NAME [FORMAT] <IN
\n
"
);
return
EXIT_FAILURE
;
return
EXIT_FAILURE
;
...
@@ -170,8 +144,6 @@ try {
...
@@ -170,8 +144,6 @@ try {
/* initialize the audio output */
/* initialize the audio output */
AudioOutput
*
ao
=
load_audio_output
(
event_loop
,
argv
[
2
]);
AudioOutput
*
ao
=
load_audio_output
(
event_loop
,
argv
[
2
]);
if
(
ao
==
NULL
)
return
1
;
/* parse the audio format */
/* parse the audio format */
...
@@ -180,7 +152,7 @@ try {
...
@@ -180,7 +152,7 @@ try {
/* do it */
/* do it */
bool
success
=
run_output
(
ao
,
audio_format
);
run_output
(
ao
,
audio_format
);
/* cleanup and exit */
/* cleanup and exit */
...
@@ -188,7 +160,7 @@ try {
...
@@ -188,7 +160,7 @@ try {
config_global_finish
();
config_global_finish
();
return
success
?
EXIT_SUCCESS
:
EXIT_FAILURE
;
return
EXIT_SUCCESS
;
}
catch
(
const
std
::
exception
&
e
)
{
}
catch
(
const
std
::
exception
&
e
)
{
LogError
(
e
);
LogError
(
e
);
return
EXIT_FAILURE
;
return
EXIT_FAILURE
;
...
...
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