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
49a38451
Commit
49a38451
authored
May 12, 2013
by
Denis Krjuchkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
timer: convert to class
parent
21dac6c0
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
79 additions
and
90 deletions
+79
-90
Makefile.am
Makefile.am
+3
-3
Timer.cxx
src/Timer.cxx
+19
-28
Timer.hxx
src/Timer.hxx
+17
-27
clock.h
src/clock.h
+8
-0
FifoOutputPlugin.cxx
src/output/FifoOutputPlugin.cxx
+10
-10
HttpdInternal.hxx
src/output/HttpdInternal.hxx
+3
-3
HttpdOutputPlugin.cxx
src/output/HttpdOutputPlugin.cxx
+8
-8
NullOutputPlugin.cxx
src/output/NullOutputPlugin.cxx
+11
-11
No files found.
Makefile.am
View file @
49a38451
...
...
@@ -94,7 +94,7 @@ mpd_headers = \
src/tag_ape.h
\
src/tag_id3.h
\
src/tag_rva2.h
\
src/
timer.h
\
src/
Timer.hxx
\
src/mpd_error.h
src_mpd_SOURCES
=
\
...
...
@@ -243,7 +243,7 @@ src_mpd_SOURCES = \
src/SongFilter.cxx src/SongFilter.hxx
\
src/SongPointer.hxx
\
src/PlaylistFile.cxx src/PlaylistFile.hxx
\
src/
timer.c
src/
Timer.cxx
#
# Windows resource file
...
...
@@ -1299,7 +1299,7 @@ test_run_output_SOURCES = test/run_output.cxx \
src/audio_check.c
\
src/audio_format.c
\
src/AudioParser.cxx
\
src/
timer.c
src/clock.c
\
src/
Timer.cxx
src/clock.c
\
src/Tag.cxx src/TagNames.c src/TagPool.cxx
\
src/Page.cxx
\
src/SocketUtil.cxx
\
...
...
src/
timer.c
→
src/
Timer.cxx
View file @
49a38451
...
...
@@ -18,7 +18,7 @@
*/
#include "config.h"
#include "
timer.h
"
#include "
Timer.hxx
"
#include "audio_format.h"
#include "clock.h"
...
...
@@ -28,46 +28,37 @@
#include <limits.h>
#include <stddef.h>
struct
timer
*
timer_new
(
const
struct
audio_format
*
af
)
Timer
::
Timer
(
const
struct
audio_format
&
af
)
:
time
(
0
),
started
(
false
),
rate
(
af
.
sample_rate
*
audio_format_frame_size
(
&
af
))
{
struct
timer
*
timer
=
g_new
(
struct
timer
,
1
);
timer
->
time
=
0
;
// us
timer
->
started
=
0
;
// false
timer
->
rate
=
af
->
sample_rate
*
audio_format_frame_size
(
af
);
// samples per second
return
timer
;
}
void
timer_free
(
struct
timer
*
timer
)
{
g_free
(
timer
);
}
void
timer_start
(
struct
timer
*
timer
)
void
Timer
::
Start
(
)
{
time
r
->
time
=
monotonic_clock_us
();
timer
->
started
=
1
;
time
=
monotonic_clock_us
();
started
=
true
;
}
void
timer_reset
(
struct
timer
*
timer
)
void
Timer
::
Reset
(
)
{
time
r
->
time
=
0
;
timer
->
started
=
0
;
time
=
0
;
started
=
false
;
}
void
timer_add
(
struct
timer
*
timer
,
int
size
)
void
Timer
::
Add
(
int
size
)
{
assert
(
timer
->
started
);
assert
(
started
);
// (size samples) / (rate samples per second) = duration seconds
// duration seconds * 1000000 = duration us
time
r
->
time
+=
((
uint64_t
)
size
*
1000000
)
/
timer
->
rate
;
time
+=
((
uint64_t
)
size
*
1000000
)
/
rate
;
}
unsigned
timer_delay
(
const
struct
timer
*
timer
)
unsigned
Timer
::
GetDelay
()
const
{
int64_t
delay
=
(
int64_t
)(
time
r
->
time
-
monotonic_clock_us
())
/
1000
;
int64_t
delay
=
(
int64_t
)(
time
-
monotonic_clock_us
())
/
1000
;
if
(
delay
<
0
)
return
0
;
...
...
@@ -77,13 +68,13 @@ timer_delay(const struct timer *timer)
return
delay
;
}
void
timer_sync
(
struct
timer
*
timer
)
void
Timer
::
Synchronize
()
const
{
int64_t
sleep_duration
;
assert
(
timer
->
started
);
assert
(
started
);
sleep_duration
=
time
r
->
time
-
monotonic_clock_us
();
sleep_duration
=
time
-
monotonic_clock_us
();
if
(
sleep_duration
>
0
)
g_usleep
(
sleep_duration
);
}
src/
timer.h
→
src/
Timer.hxx
View file @
49a38451
...
...
@@ -17,43 +17,33 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef MPD_TIMER_H
#define MPD_TIMER_H
#ifndef MPD_TIMER_H
XX
#define MPD_TIMER_H
XX
#include <stdint.h>
struct
audio_format
;
struct
t
imer
{
class
T
imer
{
uint64_t
time
;
int
started
;
int
rate
;
};
#ifdef __cplusplus
extern
"C"
{
#endif
bool
started
;
const
int
rate
;
public
:
explicit
Timer
(
const
struct
audio_format
&
af
);
struct
timer
*
timer_new
(
const
struct
audio_format
*
af
);
bool
IsStarted
()
const
{
return
started
;
}
void
timer_free
(
struct
timer
*
timer
);
void
Start
();
void
Reset
();
void
timer_start
(
struct
timer
*
timer
);
void
Add
(
int
size
);
void
timer_reset
(
struct
timer
*
timer
);
/**
* Returns the number of milliseconds to sleep to get back to sync.
*/
unsigned
GetDelay
()
const
;
void
timer_add
(
struct
timer
*
timer
,
int
size
);
/**
* Returns the number of milliseconds to sleep to get back to sync.
*/
unsigned
timer_delay
(
const
struct
timer
*
timer
);
void
timer_sync
(
struct
timer
*
timer
);
#ifdef __cplusplus
}
#endif
void
Synchronize
()
const
;
};
#endif
src/clock.h
View file @
49a38451
...
...
@@ -24,6 +24,10 @@
#include <stdint.h>
#ifdef __cplusplus
extern
"C"
{
#endif
/**
* Returns the value of a monotonic clock in milliseconds.
*/
...
...
@@ -38,4 +42,8 @@ gcc_pure
uint64_t
monotonic_clock_us
(
void
);
#ifdef __cplusplus
}
#endif
#endif
src/output/FifoOutputPlugin.cxx
View file @
49a38451
...
...
@@ -20,7 +20,7 @@
#include "config.h"
#include "FifoOutputPlugin.hxx"
#include "output_api.h"
#include "
timer.h
"
#include "
Timer.hxx
"
#include "fd_util.h"
#include "open.h"
...
...
@@ -44,7 +44,7 @@ struct FifoOutput {
int
input
;
int
output
;
bool
created
;
struct
t
imer
*
timer
;
T
imer
*
timer
;
FifoOutput
()
:
path
(
nullptr
),
input
(
-
1
),
output
(
-
1
),
created
(
false
)
{}
...
...
@@ -232,7 +232,7 @@ fifo_output_open(struct audio_output *ao, struct audio_format *audio_format,
{
FifoOutput
*
fd
=
(
FifoOutput
*
)
ao
;
fd
->
timer
=
timer_new
(
audio_format
);
fd
->
timer
=
new
Timer
(
*
audio_format
);
return
true
;
}
...
...
@@ -242,7 +242,7 @@ fifo_output_close(struct audio_output *ao)
{
FifoOutput
*
fd
=
(
FifoOutput
*
)
ao
;
timer_free
(
fd
->
timer
)
;
delete
fd
->
timer
;
}
static
void
...
...
@@ -252,7 +252,7 @@ fifo_output_cancel(struct audio_output *ao)
char
buf
[
FIFO_BUFFER_SIZE
];
int
bytes
=
1
;
timer_reset
(
fd
->
timer
);
fd
->
timer
->
Reset
(
);
while
(
bytes
>
0
&&
errno
!=
EINTR
)
bytes
=
read
(
fd
->
input
,
buf
,
FIFO_BUFFER_SIZE
);
...
...
@@ -268,8 +268,8 @@ fifo_output_delay(struct audio_output *ao)
{
FifoOutput
*
fd
=
(
FifoOutput
*
)
ao
;
return
fd
->
timer
->
started
?
timer_delay
(
fd
->
timer
)
return
fd
->
timer
->
IsStarted
()
?
fd
->
timer
->
GetDelay
(
)
:
0
;
}
...
...
@@ -280,9 +280,9 @@ fifo_output_play(struct audio_output *ao, const void *chunk, size_t size,
FifoOutput
*
fd
=
(
FifoOutput
*
)
ao
;
ssize_t
bytes
;
if
(
!
fd
->
timer
->
started
)
timer_start
(
fd
->
timer
);
timer_add
(
fd
->
timer
,
size
);
if
(
!
fd
->
timer
->
IsStarted
()
)
fd
->
timer
->
Start
(
);
fd
->
timer
->
Add
(
size
);
while
(
true
)
{
bytes
=
write
(
fd
->
output
,
chunk
,
size
);
...
...
src/output/HttpdInternal.hxx
View file @
49a38451
...
...
@@ -26,7 +26,7 @@
#define MPD_OUTPUT_HTTPD_INTERNAL_H
#include "OutputInternal.hxx"
#include "
timer.h
"
#include "
Timer.hxx
"
#include "thread/Mutex.hxx"
#include "event/ServerSocket.hxx"
...
...
@@ -72,10 +72,10 @@ struct HttpdOutput final : private ServerSocket {
mutable
Mutex
mutex
;
/**
* A #
t
imer object to synchronize this output with the
* A #
T
imer object to synchronize this output with the
* wallclock.
*/
struct
t
imer
*
timer
;
T
imer
*
timer
;
/**
* The header page, which is sent to every client on connect.
...
...
src/output/HttpdOutputPlugin.cxx
View file @
49a38451
...
...
@@ -320,7 +320,7 @@ HttpdOutput::Open(struct audio_format *audio_format, GError **error_r)
/* initialize other attributes */
clients_cnt
=
0
;
timer
=
timer_new
(
audio_format
);
timer
=
new
Timer
(
*
audio_format
);
open
=
true
;
...
...
@@ -346,7 +346,7 @@ HttpdOutput::Close()
open
=
false
;
timer_free
(
timer
)
;
delete
timer
;
clients
.
clear
();
...
...
@@ -398,7 +398,7 @@ httpd_output_delay(struct audio_output *ao)
then httpd_output_pause() will not do anything, it
will not fill the buffer and it will not update the
timer; therefore, we reset the timer here */
timer_reset
(
httpd
->
timer
);
httpd
->
timer
->
Reset
(
);
/* some arbitrary delay that is long enough to avoid
consuming too much CPU, and short enough to notice
...
...
@@ -406,8 +406,8 @@ httpd_output_delay(struct audio_output *ao)
return
1000
;
}
return
httpd
->
timer
->
started
?
timer_delay
(
httpd
->
timer
)
return
httpd
->
timer
->
IsStarted
()
?
httpd
->
timer
->
GetDelay
(
)
:
0
;
}
...
...
@@ -463,9 +463,9 @@ httpd_output_play(struct audio_output *ao, const void *chunk, size_t size,
return
0
;
}
if
(
!
httpd
->
timer
->
started
)
timer_start
(
httpd
->
timer
);
timer_add
(
httpd
->
timer
,
size
);
if
(
!
httpd
->
timer
->
IsStarted
()
)
httpd
->
timer
->
Start
(
);
httpd
->
timer
->
Add
(
size
);
return
size
;
}
...
...
src/output/NullOutputPlugin.cxx
View file @
49a38451
...
...
@@ -20,7 +20,7 @@
#include "config.h"
#include "NullOutputPlugin.hxx"
#include "output_api.h"
#include "
timer.h
"
#include "
Timer.hxx
"
#include <assert.h>
...
...
@@ -29,7 +29,7 @@ struct NullOutput {
bool
sync
;
struct
t
imer
*
timer
;
T
imer
*
timer
;
bool
Initialize
(
const
config_param
*
param
,
GError
**
error_r
)
{
return
ao_base_init
(
&
base
,
&
null_output_plugin
,
param
,
...
...
@@ -72,7 +72,7 @@ null_open(struct audio_output *ao, struct audio_format *audio_format,
NullOutput
*
nd
=
(
NullOutput
*
)
ao
;
if
(
nd
->
sync
)
nd
->
timer
=
timer_new
(
audio_format
);
nd
->
timer
=
new
Timer
(
*
audio_format
);
return
true
;
}
...
...
@@ -83,7 +83,7 @@ null_close(struct audio_output *ao)
NullOutput
*
nd
=
(
NullOutput
*
)
ao
;
if
(
nd
->
sync
)
timer_free
(
nd
->
timer
)
;
delete
nd
->
timer
;
}
static
unsigned
...
...
@@ -91,8 +91,8 @@ null_delay(struct audio_output *ao)
{
NullOutput
*
nd
=
(
NullOutput
*
)
ao
;
return
nd
->
sync
&&
nd
->
timer
->
started
?
timer_delay
(
nd
->
timer
)
return
nd
->
sync
&&
nd
->
timer
->
IsStarted
()
?
nd
->
timer
->
GetDelay
(
)
:
0
;
}
...
...
@@ -101,14 +101,14 @@ null_play(struct audio_output *ao, gcc_unused const void *chunk, size_t size,
gcc_unused
GError
**
error
)
{
NullOutput
*
nd
=
(
NullOutput
*
)
ao
;
struct
t
imer
*
timer
=
nd
->
timer
;
T
imer
*
timer
=
nd
->
timer
;
if
(
!
nd
->
sync
)
return
size
;
if
(
!
timer
->
started
)
timer
_start
(
timer
);
timer
_add
(
timer
,
size
);
if
(
!
timer
->
IsStarted
()
)
timer
->
Start
(
);
timer
->
Add
(
size
);
return
size
;
}
...
...
@@ -121,7 +121,7 @@ null_cancel(struct audio_output *ao)
if
(
!
nd
->
sync
)
return
;
timer_reset
(
nd
->
timer
);
nd
->
timer
->
Reset
(
);
}
const
struct
audio_output_plugin
null_output_plugin
=
{
...
...
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