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
5e51fa02
Commit
5e51fa02
authored
Aug 26, 2008
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
renamed player.c to player_control.c
Give player.c a better name, meaning that the code is used to control the player thread.
parent
b616dff7
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
252 additions
and
272 deletions
+252
-272
Makefile.am
src/Makefile.am
+2
-3
command.c
src/command.c
+1
-1
decoder_api.c
src/decoder_api.c
+1
-1
decoder_thread.c
src/decoder_thread.c
+1
-1
main.c
src/main.c
+1
-1
player.c
src/player.c
+0
-259
playerData.c
src/playerData.c
+1
-1
player_control.c
src/player_control.c
+241
-1
player_control.h
src/player_control.h
+0
-0
player_thread.c
src/player_thread.c
+1
-1
playlist.c
src/playlist.c
+1
-1
stats.c
src/stats.c
+1
-1
volume.c
src/volume.c
+1
-1
No files found.
src/Makefile.am
View file @
5e51fa02
...
...
@@ -68,8 +68,8 @@ mpd_headers = \
path.h
\
pcm_utils.h
\
permission.h
\
player.h
\
player_thread.h
\
player_control.h
\
playerData.h
\
playlist.h
\
replayGain.h
\
...
...
@@ -130,9 +130,8 @@ mpd_SOURCES = \
path.c
\
pcm_utils.c
\
permission.c
\
player.c
\
player_control.c
\
player_thread.c
\
player_control.c
\
playerData.c
\
playlist.c
\
replayGain.c
\
...
...
src/command.c
View file @
5e51fa02
...
...
@@ -17,7 +17,7 @@
*/
#include "command.h"
#include "player.h"
#include "player
_control
.h"
#include "playlist.h"
#include "ls.h"
#include "directory.h"
...
...
src/decoder_api.c
View file @
5e51fa02
...
...
@@ -20,7 +20,7 @@
#include "decoder_internal.h"
#include "decoder_list.h"
#include "decoder_control.h"
#include "player.h"
#include "player
_control
.h"
#include "audio.h"
#include "utils.h"
...
...
src/decoder_thread.c
View file @
5e51fa02
...
...
@@ -20,7 +20,7 @@
#include "decoder_thread.h"
#include "decoder_control.h"
#include "decoder_internal.h"
#include "player.h"
#include "player
_control
.h"
#include "path.h"
#include "log.h"
...
...
src/main.c
View file @
5e51fa02
...
...
@@ -26,7 +26,7 @@
#include "path.h"
#include "playerData.h"
#include "decoder_thread.h"
#include "player.h"
#include "player
_control
.h"
#include "stats.h"
#include "sig_handlers.h"
#include "audio.h"
...
...
src/player.c
deleted
100644 → 0
View file @
b616dff7
/* the Music Player Daemon (MPD)
* Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
* This project's homepage is: http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "player.h"
#include "player_thread.h"
#include "path.h"
#include "ack.h"
#include "os_compat.h"
#include "main_notify.h"
static
void
set_current_song
(
Song
*
song
)
{
assert
(
song
!=
NULL
);
assert
(
song
->
url
!=
NULL
);
pc
.
fileTime
=
song
->
tag
?
song
->
tag
->
time
:
0
;
pc
.
next_song
=
song
;
}
static
void
player_command
(
enum
player_command
cmd
)
{
pc
.
command
=
cmd
;
while
(
pc
.
command
!=
PLAYER_COMMAND_NONE
)
{
notify_signal
(
&
pc
.
notify
);
wait_main_task
();
}
}
void
player_command_finished
()
{
assert
(
pc
.
command
!=
PLAYER_COMMAND_NONE
);
pc
.
command
=
PLAYER_COMMAND_NONE
;
wakeup_main_task
();
}
void
playerPlay
(
Song
*
song
)
{
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
if
(
pc
.
state
!=
PLAYER_STATE_STOP
)
player_command
(
PLAYER_COMMAND_STOP
);
pc
.
queueState
=
PLAYER_QUEUE_BLANK
;
set_current_song
(
song
);
player_command
(
PLAYER_COMMAND_PLAY
);
}
void
playerWait
(
void
)
{
player_command
(
PLAYER_COMMAND_CLOSE_AUDIO
);
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
player_command
(
PLAYER_COMMAND_CLOSE_AUDIO
);
pc
.
queueState
=
PLAYER_QUEUE_BLANK
;
}
void
playerKill
(
void
)
{
player_command
(
PLAYER_COMMAND_EXIT
);
}
void
playerPause
(
void
)
{
if
(
pc
.
state
!=
PLAYER_STATE_STOP
)
player_command
(
PLAYER_COMMAND_PAUSE
);
}
void
playerSetPause
(
int
pause_flag
)
{
switch
(
pc
.
state
)
{
case
PLAYER_STATE_STOP
:
break
;
case
PLAYER_STATE_PLAY
:
if
(
pause_flag
)
playerPause
();
break
;
case
PLAYER_STATE_PAUSE
:
if
(
!
pause_flag
)
playerPause
();
break
;
}
}
int
getPlayerElapsedTime
(
void
)
{
return
(
int
)(
pc
.
elapsedTime
+
0
.
5
);
}
unsigned
long
getPlayerBitRate
(
void
)
{
return
pc
.
bitRate
;
}
int
getPlayerTotalTime
(
void
)
{
return
(
int
)(
pc
.
totalTime
+
0
.
5
);
}
enum
player_state
getPlayerState
(
void
)
{
return
pc
.
state
;
}
void
clearPlayerError
(
void
)
{
pc
.
error
=
0
;
}
int
getPlayerError
(
void
)
{
return
pc
.
error
;
}
char
*
getPlayerErrorStr
(
void
)
{
/* static OK here, only one user in main task */
static
char
error
[
MPD_PATH_MAX
+
64
];
/* still too much */
static
const
size_t
errorlen
=
sizeof
(
error
);
char
path_max_tmp
[
MPD_PATH_MAX
];
*
error
=
'\0'
;
/* likely */
switch
(
pc
.
error
)
{
case
PLAYER_ERROR_FILENOTFOUND
:
snprintf
(
error
,
errorlen
,
"file
\"
%s
\"
does not exist or is inaccessible"
,
get_song_url
(
path_max_tmp
,
pc
.
errored_song
));
break
;
case
PLAYER_ERROR_FILE
:
snprintf
(
error
,
errorlen
,
"problems decoding
\"
%s
\"
"
,
get_song_url
(
path_max_tmp
,
pc
.
errored_song
));
break
;
case
PLAYER_ERROR_AUDIO
:
strcpy
(
error
,
"problems opening audio device"
);
break
;
case
PLAYER_ERROR_SYSTEM
:
strcpy
(
error
,
"system error occured"
);
break
;
case
PLAYER_ERROR_UNKTYPE
:
snprintf
(
error
,
errorlen
,
"file type of
\"
%s
\"
is unknown"
,
get_song_url
(
path_max_tmp
,
pc
.
errored_song
));
}
return
*
error
?
error
:
NULL
;
}
void
queueSong
(
Song
*
song
)
{
assert
(
pc
.
queueState
==
PLAYER_QUEUE_BLANK
);
set_current_song
(
song
);
pc
.
queueState
=
PLAYER_QUEUE_FULL
;
}
enum
player_queue_state
getPlayerQueueState
(
void
)
{
return
pc
.
queueState
;
}
void
setQueueState
(
enum
player_queue_state
queueState
)
{
pc
.
queueState
=
queueState
;
notify_signal
(
&
pc
.
notify
);
}
void
playerQueueLock
(
void
)
{
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
player_command
(
PLAYER_COMMAND_LOCK_QUEUE
);
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_LOCKED
);
}
void
playerQueueUnlock
(
void
)
{
if
(
pc
.
queueLockState
==
PLAYER_QUEUE_LOCKED
)
player_command
(
PLAYER_COMMAND_UNLOCK_QUEUE
);
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
}
int
playerSeek
(
Song
*
song
,
float
seek_time
)
{
assert
(
song
!=
NULL
);
if
(
pc
.
state
==
PLAYER_STATE_STOP
)
return
-
1
;
if
(
pc
.
next_song
!=
song
)
set_current_song
(
song
);
if
(
pc
.
error
==
PLAYER_ERROR_NOERROR
)
{
pc
.
seekWhere
=
seek_time
;
player_command
(
PLAYER_COMMAND_SEEK
);
}
return
0
;
}
float
getPlayerCrossFade
(
void
)
{
return
pc
.
crossFade
;
}
void
setPlayerCrossFade
(
float
crossFadeInSeconds
)
{
if
(
crossFadeInSeconds
<
0
)
crossFadeInSeconds
=
0
;
pc
.
crossFade
=
crossFadeInSeconds
;
}
void
setPlayerSoftwareVolume
(
int
volume
)
{
volume
=
(
volume
>
1000
)
?
1000
:
(
volume
<
0
?
0
:
volume
);
pc
.
softwareVolume
=
volume
;
}
double
getPlayerTotalPlayTime
(
void
)
{
return
pc
.
totalPlayTime
;
}
unsigned
int
getPlayerSampleRate
(
void
)
{
return
pc
.
sampleRate
;
}
int
getPlayerBits
(
void
)
{
return
pc
.
bits
;
}
int
getPlayerChannels
(
void
)
{
return
pc
.
channels
;
}
/* this actually creates a dupe of the current metadata */
Song
*
playerCurrentDecodeSong
(
void
)
{
return
NULL
;
}
src/playerData.c
View file @
5e51fa02
...
...
@@ -17,7 +17,7 @@
*/
#include "playerData.h"
#include "player.h"
#include "player
_control
.h"
#include "decoder_control.h"
#include "outputBuffer.h"
#include "conf.h"
...
...
src/player_control.c
View file @
5e51fa02
...
...
@@ -16,6 +16,246 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "player.h"
#include "player_control.h"
#include "path.h"
#include "log.h"
#include "ack.h"
#include "os_compat.h"
#include "main_notify.h"
struct
player_control
pc
;
static
void
set_current_song
(
Song
*
song
)
{
assert
(
song
!=
NULL
);
assert
(
song
->
url
!=
NULL
);
pc
.
fileTime
=
song
->
tag
?
song
->
tag
->
time
:
0
;
pc
.
next_song
=
song
;
}
static
void
player_command
(
enum
player_command
cmd
)
{
pc
.
command
=
cmd
;
while
(
pc
.
command
!=
PLAYER_COMMAND_NONE
)
{
notify_signal
(
&
pc
.
notify
);
wait_main_task
();
}
}
void
player_command_finished
()
{
assert
(
pc
.
command
!=
PLAYER_COMMAND_NONE
);
pc
.
command
=
PLAYER_COMMAND_NONE
;
wakeup_main_task
();
}
void
playerPlay
(
Song
*
song
)
{
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
if
(
pc
.
state
!=
PLAYER_STATE_STOP
)
player_command
(
PLAYER_COMMAND_STOP
);
pc
.
queueState
=
PLAYER_QUEUE_BLANK
;
set_current_song
(
song
);
player_command
(
PLAYER_COMMAND_PLAY
);
}
void
playerWait
(
void
)
{
player_command
(
PLAYER_COMMAND_CLOSE_AUDIO
);
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
player_command
(
PLAYER_COMMAND_CLOSE_AUDIO
);
pc
.
queueState
=
PLAYER_QUEUE_BLANK
;
}
void
playerKill
(
void
)
{
player_command
(
PLAYER_COMMAND_EXIT
);
}
void
playerPause
(
void
)
{
if
(
pc
.
state
!=
PLAYER_STATE_STOP
)
player_command
(
PLAYER_COMMAND_PAUSE
);
}
void
playerSetPause
(
int
pause_flag
)
{
switch
(
pc
.
state
)
{
case
PLAYER_STATE_STOP
:
break
;
case
PLAYER_STATE_PLAY
:
if
(
pause_flag
)
playerPause
();
break
;
case
PLAYER_STATE_PAUSE
:
if
(
!
pause_flag
)
playerPause
();
break
;
}
}
int
getPlayerElapsedTime
(
void
)
{
return
(
int
)(
pc
.
elapsedTime
+
0
.
5
);
}
unsigned
long
getPlayerBitRate
(
void
)
{
return
pc
.
bitRate
;
}
int
getPlayerTotalTime
(
void
)
{
return
(
int
)(
pc
.
totalTime
+
0
.
5
);
}
enum
player_state
getPlayerState
(
void
)
{
return
pc
.
state
;
}
void
clearPlayerError
(
void
)
{
pc
.
error
=
0
;
}
int
getPlayerError
(
void
)
{
return
pc
.
error
;
}
char
*
getPlayerErrorStr
(
void
)
{
/* static OK here, only one user in main task */
static
char
error
[
MPD_PATH_MAX
+
64
];
/* still too much */
static
const
size_t
errorlen
=
sizeof
(
error
);
char
path_max_tmp
[
MPD_PATH_MAX
];
*
error
=
'\0'
;
/* likely */
switch
(
pc
.
error
)
{
case
PLAYER_ERROR_FILENOTFOUND
:
snprintf
(
error
,
errorlen
,
"file
\"
%s
\"
does not exist or is inaccessible"
,
get_song_url
(
path_max_tmp
,
pc
.
errored_song
));
break
;
case
PLAYER_ERROR_FILE
:
snprintf
(
error
,
errorlen
,
"problems decoding
\"
%s
\"
"
,
get_song_url
(
path_max_tmp
,
pc
.
errored_song
));
break
;
case
PLAYER_ERROR_AUDIO
:
strcpy
(
error
,
"problems opening audio device"
);
break
;
case
PLAYER_ERROR_SYSTEM
:
strcpy
(
error
,
"system error occured"
);
break
;
case
PLAYER_ERROR_UNKTYPE
:
snprintf
(
error
,
errorlen
,
"file type of
\"
%s
\"
is unknown"
,
get_song_url
(
path_max_tmp
,
pc
.
errored_song
));
}
return
*
error
?
error
:
NULL
;
}
void
queueSong
(
Song
*
song
)
{
assert
(
pc
.
queueState
==
PLAYER_QUEUE_BLANK
);
set_current_song
(
song
);
pc
.
queueState
=
PLAYER_QUEUE_FULL
;
}
enum
player_queue_state
getPlayerQueueState
(
void
)
{
return
pc
.
queueState
;
}
void
setQueueState
(
enum
player_queue_state
queueState
)
{
pc
.
queueState
=
queueState
;
notify_signal
(
&
pc
.
notify
);
}
void
playerQueueLock
(
void
)
{
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
player_command
(
PLAYER_COMMAND_LOCK_QUEUE
);
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_LOCKED
);
}
void
playerQueueUnlock
(
void
)
{
if
(
pc
.
queueLockState
==
PLAYER_QUEUE_LOCKED
)
player_command
(
PLAYER_COMMAND_UNLOCK_QUEUE
);
assert
(
pc
.
queueLockState
==
PLAYER_QUEUE_UNLOCKED
);
}
int
playerSeek
(
Song
*
song
,
float
seek_time
)
{
assert
(
song
!=
NULL
);
if
(
pc
.
state
==
PLAYER_STATE_STOP
)
return
-
1
;
if
(
pc
.
next_song
!=
song
)
set_current_song
(
song
);
if
(
pc
.
error
==
PLAYER_ERROR_NOERROR
)
{
pc
.
seekWhere
=
seek_time
;
player_command
(
PLAYER_COMMAND_SEEK
);
}
return
0
;
}
float
getPlayerCrossFade
(
void
)
{
return
pc
.
crossFade
;
}
void
setPlayerCrossFade
(
float
crossFadeInSeconds
)
{
if
(
crossFadeInSeconds
<
0
)
crossFadeInSeconds
=
0
;
pc
.
crossFade
=
crossFadeInSeconds
;
}
void
setPlayerSoftwareVolume
(
int
volume
)
{
volume
=
(
volume
>
1000
)
?
1000
:
(
volume
<
0
?
0
:
volume
);
pc
.
softwareVolume
=
volume
;
}
double
getPlayerTotalPlayTime
(
void
)
{
return
pc
.
totalPlayTime
;
}
unsigned
int
getPlayerSampleRate
(
void
)
{
return
pc
.
sampleRate
;
}
int
getPlayerBits
(
void
)
{
return
pc
.
bits
;
}
int
getPlayerChannels
(
void
)
{
return
pc
.
channels
;
}
/* this actually creates a dupe of the current metadata */
Song
*
playerCurrentDecodeSong
(
void
)
{
return
NULL
;
}
src/player.h
→
src/player
_control
.h
View file @
5e51fa02
File moved
src/player_thread.c
View file @
5e51fa02
...
...
@@ -17,7 +17,7 @@
*/
#include "player_thread.h"
#include "player.h"
#include "player
_control
.h"
#include "playerData.h"
#include "decoder_control.h"
#include "audio.h"
...
...
src/playlist.c
View file @
5e51fa02
...
...
@@ -17,7 +17,7 @@
*/
#include "playlist.h"
#include "player.h"
#include "player
_control
.h"
#include "command.h"
#include "ls.h"
#include "tag.h"
...
...
src/stats.c
View file @
5e51fa02
...
...
@@ -20,7 +20,7 @@
#include "directory.h"
#include "myfprintf.h"
#include "player.h"
#include "player
_control
.h"
#include "tagTracker.h"
#include "os_compat.h"
...
...
src/volume.c
View file @
5e51fa02
...
...
@@ -20,7 +20,7 @@
#include "command.h"
#include "conf.h"
#include "log.h"
#include "player.h"
#include "player
_control
.h"
#include "gcc.h"
#include "utils.h"
#include "ack.h"
...
...
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