Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
3decf123
Commit
3decf123
authored
Dec 15, 2014
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
playlist: remove status.i_status
parent
8fed9f21
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
57 additions
and
77 deletions
+57
-77
src/playlist/control.c
src/playlist/control.c
+10
-19
src/playlist/engine.c
src/playlist/engine.c
+7
-2
src/playlist/playlist_internal.h
src/playlist/playlist_internal.h
+0
-1
src/playlist/thread.c
src/playlist/thread.c
+40
-55
No files found.
src/playlist/control.c
View file @
3decf123
...
...
@@ -87,39 +87,30 @@ static void playlist_vaControl( playlist_t *p_playlist, int i_query, va_list arg
}
case
PLAYLIST_PLAY
:
if
(
pl_priv
(
p_playlist
)
->
p_input
)
{
pl_priv
(
p_playlist
)
->
status
.
i_status
=
PLAYLIST_RUNNING
;
var_SetInteger
(
pl_priv
(
p_playlist
)
->
p_input
,
"state"
,
PLAYING_S
);
break
;
}
else
if
(
pl_priv
(
p_playlist
)
->
p_input
==
NULL
)
{
pl_priv
(
p_playlist
)
->
request
.
b_request
=
true
;
pl_priv
(
p_playlist
)
->
request
.
p_node
=
get_current_status_node
(
p_playlist
);
pl_priv
(
p_playlist
)
->
request
.
p_item
=
get_current_status_item
(
p_playlist
);
pl_priv
(
p_playlist
)
->
request
.
i_skip
=
0
;
}
else
var_SetInteger
(
pl_priv
(
p_playlist
)
->
p_input
,
"state"
,
PLAYING_S
);
break
;
case
PLAYLIST_TOGGLE_PAUSE
:
if
(
!
pl_priv
(
p_playlist
)
->
p_input
)
{
/* FIXME: is this really useful without input? */
pl_priv
(
p_playlist
)
->
status
.
i_status
=
PLAYLIST_PAUSED
;
/* return without notifying the playlist thread as there is nothing to do */
return
;
if
(
pl_priv
(
p_playlist
)
->
p_input
==
NULL
)
{
pl_priv
(
p_playlist
)
->
request
.
b_request
=
true
;
pl_priv
(
p_playlist
)
->
request
.
p_node
=
get_current_status_node
(
p_playlist
);
pl_priv
(
p_playlist
)
->
request
.
p_item
=
get_current_status_item
(
p_playlist
);
pl_priv
(
p_playlist
)
->
request
.
i_skip
=
0
;
}
else
if
(
var_GetInteger
(
pl_priv
(
p_playlist
)
->
p_input
,
"state"
)
==
PAUSE_S
)
{
pl_priv
(
p_playlist
)
->
status
.
i_status
=
PLAYLIST_RUNNING
;
var_SetInteger
(
pl_priv
(
p_playlist
)
->
p_input
,
"state"
,
PLAYING_S
);
}
else
{
pl_priv
(
p_playlist
)
->
status
.
i_status
=
PLAYLIST_PAUSED
;
var_SetInteger
(
pl_priv
(
p_playlist
)
->
p_input
,
"state"
,
PAUSE_S
);
}
break
;
case
PLAYLIST_SKIP
:
...
...
src/playlist/engine.c
View file @
3decf123
...
...
@@ -261,7 +261,6 @@ playlist_t *playlist_Create( vlc_object_t *p_parent )
pl_priv
(
p_playlist
)
->
status
.
p_item
=
NULL
;
pl_priv
(
p_playlist
)
->
status
.
p_node
=
p_playlist
->
p_playing
;
pl_priv
(
p_playlist
)
->
request
.
b_request
=
false
;
pl_priv
(
p_playlist
)
->
status
.
i_status
=
PLAYLIST_STOPPED
;
if
(
ml
!=
NULL
)
playlist_MLLoad
(
p_playlist
);
...
...
@@ -496,8 +495,14 @@ playlist_item_t * playlist_CurrentPlayingItem( playlist_t * p_playlist )
int
playlist_Status
(
playlist_t
*
p_playlist
)
{
input_thread_t
*
p_input
=
pl_priv
(
p_playlist
)
->
p_input
;
PL_ASSERT_LOCKED
;
return
pl_priv
(
p_playlist
)
->
status
.
i_status
;
if
(
p_input
==
NULL
)
return
PLAYLIST_STOPPED
;
if
(
var_GetInteger
(
p_input
,
"state"
)
==
PAUSE_S
)
return
PLAYLIST_PAUSED
;
return
PLAYLIST_RUNNING
;
}
src/playlist/playlist_internal.h
View file @
3decf123
...
...
@@ -61,7 +61,6 @@ typedef struct playlist_private_t
struct
{
/* Current status. These fields are readonly, only the playlist
* main loop can touch it*/
playlist_status_t
i_status
;
/**< Current status of playlist */
playlist_item_t
*
p_item
;
/**< Currently playing/active item */
playlist_item_t
*
p_node
;
/**< Current node to play from */
}
status
;
...
...
src/playlist/thread.c
View file @
3decf123
...
...
@@ -190,9 +190,8 @@ void ResetCurrentlyPlaying( playlist_t *p_playlist,
*
* \param p_playlist the playlist object
* \param p_item the item to play
* \return nothing
*/
static
void
PlayItem
(
playlist_t
*
p_playlist
,
playlist_item_t
*
p_item
)
static
bool
PlayItem
(
playlist_t
*
p_playlist
,
playlist_item_t
*
p_item
)
{
playlist_private_t
*
p_sys
=
pl_priv
(
p_playlist
);
input_item_t
*
p_input
=
p_item
->
p_input
;
...
...
@@ -203,9 +202,6 @@ static void PlayItem( playlist_t *p_playlist, playlist_item_t *p_item )
p_item
->
i_nb_played
++
;
set_current_status_item
(
p_playlist
,
p_item
);
p_sys
->
status
.
i_status
=
PLAYLIST_RUNNING
;
assert
(
p_sys
->
p_input
==
NULL
);
PL_UNLOCK
;
...
...
@@ -243,6 +239,7 @@ static void PlayItem( playlist_t *p_playlist, playlist_item_t *p_item )
PL_LOCK
;
p_sys
->
p_input
=
p_input_thread
;
return
p_input_thread
!=
NULL
;
}
/**
...
...
@@ -268,7 +265,14 @@ static playlist_item_t *NextItem( playlist_t *p_playlist )
/* Start the real work */
if
(
p_sys
->
request
.
b_request
)
{
/* Clear the request */
p_sys
->
request
.
b_request
=
false
;
p_new
=
p_sys
->
request
.
p_item
;
if
(
p_new
==
NULL
&&
p_sys
->
request
.
p_node
==
NULL
)
return
NULL
;
/* Stop request! */
int
i_skip
=
p_sys
->
request
.
i_skip
;
PL_DEBUG
(
"processing request item: %s, node: %s, skip: %i"
,
PLI_NAME
(
p_sys
->
request
.
p_item
),
...
...
@@ -351,8 +355,6 @@ static playlist_item_t *NextItem( playlist_t *p_playlist )
p_new
=
ARRAY_VAL
(
p_playlist
->
current
,
p_playlist
->
i_current_index
);
}
/* Clear the request */
p_sys
->
request
.
b_request
=
false
;
}
/* "Automatic" item change ( next ) */
else
...
...
@@ -469,41 +471,15 @@ static void LoopInput( playlist_t *p_playlist )
vlc_cond_wait
(
&
p_sys
->
signal
,
&
p_sys
->
lock
);
}
static
void
LoopRequest
(
playlist_t
*
p_playlist
,
int
i_status
)
static
bool
Next
(
playlist_t
*
p_playlist
)
{
playlist_private_t
*
p_sys
=
pl_priv
(
p_playlist
);
assert
(
!
p_sys
->
p_input
);
/* No input. Several cases
* - No request, running status -> start new item
* - No request, stopped status -> collect garbage
* - Request, running requested -> start new item
* - Request, stopped requested -> collect garbage
*/
if
(
i_status
==
PLAYLIST_STOPPED
)
{
p_sys
->
status
.
i_status
=
PLAYLIST_STOPPED
;
vlc_cond_wait
(
&
p_sys
->
signal
,
&
p_sys
->
lock
);
return
;
}
playlist_item_t
*
p_item
=
NextItem
(
p_playlist
);
if
(
p_item
)
{
msg_Dbg
(
p_playlist
,
"starting playback of the new playlist item"
);
ResyncCurrentIndex
(
p_playlist
,
p_item
);
PlayItem
(
p_playlist
,
p_item
);
return
;
}
msg_Dbg
(
p_playlist
,
"nothing to play"
);
p_sys
->
status
.
i_status
=
PLAYLIST_STOPPED
;
if
(
p_item
==
NULL
)
return
false
;
if
(
var_InheritBool
(
p_playlist
,
"play-and-exit"
)
)
{
msg_Info
(
p_playlist
,
"end of playlist, exiting"
);
libvlc_Quit
(
p_playlist
->
p_libvlc
);
}
msg_Dbg
(
p_playlist
,
"starting playback of new item"
);
ResyncCurrentIndex
(
p_playlist
,
p_item
);
return
PlayItem
(
p_playlist
,
p_item
);
}
/**
...
...
@@ -515,32 +491,41 @@ static void *Thread ( void *data )
playlist_private_t
*
p_sys
=
pl_priv
(
p_playlist
);
PL_LOCK
;
for
(
;;
)
while
(
!
p_sys
->
killed
)
{
while
(
p_sys
->
p_input
!=
NULL
)
LoopInput
(
p_playlist
);
/* Playlist in stopped state */
assert
(
p_sys
->
p_input
==
NULL
);
if
(
p_sys
->
killed
)
break
;
/* THE END */
if
(
!
p_sys
->
request
.
b_request
)
{
vlc_cond_wait
(
&
p_sys
->
signal
,
&
p_sys
->
lock
);
continue
;
}
int
status
=
p_sys
->
status
.
i_status
;
if
(
p_sys
->
request
.
b_request
)
status
=
(
p_sys
->
request
.
p_item
||
p_sys
->
request
.
p_node
)
?
PLAYLIST_RUNNING
:
PLAYLIST_STOPPED
;
while
(
!
p_sys
->
killed
&&
Next
(
p_playlist
)
)
{
/* Playlist in running state */
assert
(
p_sys
->
p_input
!=
NULL
);
/* Destroy any video display if the playlist is supposed to stop */
if
(
status
==
PLAYLIST_STOPPED
&&
input_resource_HasVout
(
p_sys
->
p_input_resource
)
)
do
LoopInput
(
p_playlist
);
while
(
p_sys
->
p_input
!=
NULL
);
}
msg_Dbg
(
p_playlist
,
"nothing to play"
);
if
(
var_InheritBool
(
p_playlist
,
"play-and-exit"
)
)
{
msg_Info
(
p_playlist
,
"end of playlist, exiting"
);
libvlc_Quit
(
p_playlist
->
p_libvlc
);
}
/* Destroy any video display now (XXX: ugly hack) */
if
(
input_resource_HasVout
(
p_sys
->
p_input_resource
)
)
{
PL_UNLOCK
;
/* Mind: NO LOCKS while manipulating input resources! */
input_resource_TerminateVout
(
p_sys
->
p_input_resource
);
PL_LOCK
;
continue
;
/* lost lock = lost state */
}
LoopRequest
(
p_playlist
,
status
);
}
p_sys
->
status
.
i_status
=
PLAYLIST_STOPPED
;
PL_UNLOCK
;
input_resource_Terminate
(
p_sys
->
p_input_resource
);
...
...
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