Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
bad878b5
Commit
bad878b5
authored
Aug 31, 2008
by
Pierre d'Herbemont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
playlist: Fetcher and parser are playlist private.
parent
54166d1b
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
74 additions
and
64 deletions
+74
-64
include/vlc_playlist.h
include/vlc_playlist.h
+6
-2
src/input/meta.c
src/input/meta.c
+2
-2
src/playlist/control.c
src/playlist/control.c
+25
-25
src/playlist/engine.c
src/playlist/engine.c
+16
-16
src/playlist/playlist_internal.h
src/playlist/playlist_internal.h
+6
-0
src/playlist/thread.c
src/playlist/thread.c
+19
-19
No files found.
include/vlc_playlist.h
View file @
bad878b5
...
...
@@ -153,6 +153,8 @@ struct playlist_item_t
typedef
enum
{
PLAYLIST_STOPPED
,
PLAYLIST_RUNNING
,
PLAYLIST_PAUSED
}
playlist_status_t
;
typedef
struct
playlist_private_t
playlist_private_t
;
/** Structure containing information about the playlist */
struct
playlist_t
{
...
...
@@ -200,8 +202,6 @@ struct playlist_t
int
i_order
;
/**< Last ordering applied to the playlist */
mtime_t
gc_date
;
bool
b_cant_sleep
;
playlist_preparse_t
*
p_preparse
;
/**< Preparser object */
playlist_fetcher_t
*
p_fetcher
;
/**< Meta and art fetcher object */
struct
{
/* Current status. These fields are readonly, only the playlist
...
...
@@ -224,6 +224,10 @@ struct playlist_t
when processing the request */
vlc_mutex_t
lock
;
/**< Lock to protect request */
}
request
;
/* All other data is PRIVATE. You can't access it
* outside of src/input */
playlist_private_t
*
p
;
};
/** Helper to add an item */
...
...
src/input/meta.c
View file @
bad878b5
...
...
@@ -99,7 +99,7 @@ int input_ArtFind( playlist_t *p_playlist, input_item_t *p_item )
/* If we already checked this album in this session, skip */
if
(
psz_artist
&&
psz_album
)
{
FOREACH_ARRAY
(
playlist_album_t
album
,
p_playlist
->
p_fetcher
->
albums
)
FOREACH_ARRAY
(
playlist_album_t
album
,
p_playlist
->
p
->
p
_fetcher
->
albums
)
if
(
!
strcmp
(
album
.
psz_artist
,
psz_artist
)
&&
!
strcmp
(
album
.
psz_album
,
psz_album
)
)
{
...
...
@@ -179,7 +179,7 @@ int input_ArtFind( playlist_t *p_playlist, input_item_t *p_item )
a
.
psz_album
=
psz_album
;
a
.
psz_arturl
=
input_item_GetArtURL
(
p_item
);
a
.
b_found
=
(
i_ret
==
VLC_EGENERIC
?
false
:
true
);
ARRAY_APPEND
(
p_playlist
->
p_fetcher
->
albums
,
a
);
ARRAY_APPEND
(
p_playlist
->
p
->
p
_fetcher
->
albums
,
a
);
}
else
{
...
...
src/playlist/control.c
View file @
bad878b5
...
...
@@ -190,19 +190,19 @@ static int PlaylistVAControl( playlist_t * p_playlist, int i_query, va_list args
int
playlist_PreparseEnqueue
(
playlist_t
*
p_playlist
,
input_item_t
*
p_item
)
{
vlc_object_lock
(
p_playlist
->
p_preparse
);
if
(
!
vlc_object_alive
(
p_playlist
->
p_preparse
)
)
vlc_object_lock
(
p_playlist
->
p
->
p
_preparse
);
if
(
!
vlc_object_alive
(
p_playlist
->
p
->
p
_preparse
)
)
{
vlc_object_unlock
(
p_playlist
->
p_preparse
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_preparse
);
return
VLC_EGENERIC
;
}
vlc_gc_incref
(
p_item
);
INSERT_ELEM
(
p_playlist
->
p_preparse
->
pp_waiting
,
p_playlist
->
p_preparse
->
i_waiting
,
p_playlist
->
p_preparse
->
i_waiting
,
INSERT_ELEM
(
p_playlist
->
p
->
p
_preparse
->
pp_waiting
,
p_playlist
->
p
->
p
_preparse
->
i_waiting
,
p_playlist
->
p
->
p
_preparse
->
i_waiting
,
p_item
);
vlc_object_signal_unlocked
(
p_playlist
->
p_preparse
);
vlc_object_unlock
(
p_playlist
->
p_preparse
);
vlc_object_signal_unlocked
(
p_playlist
->
p
->
p
_preparse
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_preparse
);
return
VLC_SUCCESS
;
}
...
...
@@ -212,15 +212,15 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist,
playlist_item_t
*
p_item
)
{
vlc_object_lock
(
p_playlist
);
vlc_object_lock
(
p_playlist
->
p_preparse
);
if
(
!
vlc_object_alive
(
p_playlist
->
p_preparse
)
)
vlc_object_lock
(
p_playlist
->
p
->
p
_preparse
);
if
(
!
vlc_object_alive
(
p_playlist
->
p
->
p
_preparse
)
)
{
vlc_object_unlock
(
p_playlist
->
p_preparse
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_preparse
);
vlc_object_unlock
(
p_playlist
);
return
VLC_EGENERIC
;
}
PreparseEnqueueItemSub
(
p_playlist
,
p_item
);
vlc_object_unlock
(
p_playlist
->
p_preparse
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_preparse
);
vlc_object_unlock
(
p_playlist
);
return
VLC_SUCCESS
;
}
...
...
@@ -228,19 +228,19 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist,
int
playlist_AskForArtEnqueue
(
playlist_t
*
p_playlist
,
input_item_t
*
p_item
)
{
vlc_object_lock
(
p_playlist
->
p_fetcher
);
if
(
!
vlc_object_alive
(
p_playlist
->
p_fetcher
)
)
vlc_object_lock
(
p_playlist
->
p
->
p
_fetcher
);
if
(
!
vlc_object_alive
(
p_playlist
->
p
->
p
_fetcher
)
)
{
vlc_object_unlock
(
p_playlist
->
p_fetcher
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_fetcher
);
return
VLC_EGENERIC
;
}
vlc_gc_incref
(
p_item
);
INSERT_ELEM
(
p_playlist
->
p_fetcher
->
pp_waiting
,
p_playlist
->
p_fetcher
->
i_waiting
,
p_playlist
->
p_fetcher
->
i_waiting
,
p_item
);
vlc_object_signal_unlocked
(
p_playlist
->
p_fetcher
);
vlc_object_unlock
(
p_playlist
->
p_fetcher
);
INSERT_ELEM
(
p_playlist
->
p
->
p
_fetcher
->
pp_waiting
,
p_playlist
->
p
->
p
_fetcher
->
i_waiting
,
p_playlist
->
p
->
p
_fetcher
->
i_waiting
,
p_item
);
vlc_object_signal_unlocked
(
p_playlist
->
p
->
p
_fetcher
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_fetcher
);
return
VLC_SUCCESS
;
}
...
...
@@ -251,9 +251,9 @@ static void PreparseEnqueueItemSub( playlist_t *p_playlist,
if
(
p_item
->
i_children
==
-
1
)
{
vlc_gc_incref
(
p_item
->
p_input
);
INSERT_ELEM
(
p_playlist
->
p_preparse
->
pp_waiting
,
p_playlist
->
p_preparse
->
i_waiting
,
p_playlist
->
p_preparse
->
i_waiting
,
INSERT_ELEM
(
p_playlist
->
p
->
p
_preparse
->
pp_waiting
,
p_playlist
->
p
->
p
_preparse
->
i_waiting
,
p_playlist
->
p
->
p
_preparse
->
i_waiting
,
p_item
->
p_input
);
}
else
...
...
@@ -540,8 +540,8 @@ int playlist_PlayItem( playlist_t *p_playlist, playlist_item_t *p_item )
}
free
(
psz_uri
);
if
(
p_playlist
->
p_fetcher
&&
p_playlist
->
p_fetcher
->
i_art_policy
==
ALBUM_ART_WHEN_PLAYED
)
if
(
p_playlist
->
p
->
p
_fetcher
&&
p_playlist
->
p
->
p
_fetcher
->
i_art_policy
==
ALBUM_ART_WHEN_PLAYED
)
{
bool
b_has_art
;
...
...
src/playlist/engine.c
View file @
bad878b5
...
...
@@ -174,14 +174,14 @@ static void playlist_Destructor( vlc_object_t * p_this )
{
playlist_t
*
p_playlist
=
(
playlist_t
*
)
p_this
;
if
(
p_playlist
->
p_preparse
)
if
(
p_playlist
->
p
->
p
_preparse
)
{
vlc_object_release
(
p_playlist
->
p_preparse
);
vlc_object_release
(
p_playlist
->
p
->
p
_preparse
);
}
if
(
p_playlist
->
p_fetcher
)
if
(
p_playlist
->
p
->
p
_fetcher
)
{
vlc_object_release
(
p_playlist
->
p_fetcher
);
vlc_object_release
(
p_playlist
->
p
->
p
_fetcher
);
}
msg_Dbg
(
p_this
,
"Destroyed"
);
}
...
...
@@ -517,10 +517,10 @@ void playlist_LastLoop( playlist_t *p_playlist )
playlist_ServicesDiscoveryKillAll
(
p_playlist
);
playlist_MLDump
(
p_playlist
);
vlc_object_kill
(
p_playlist
->
p_preparse
);
vlc_thread_join
(
p_playlist
->
p_preparse
);
vlc_object_kill
(
p_playlist
->
p_fetcher
);
vlc_thread_join
(
p_playlist
->
p_fetcher
);
vlc_object_kill
(
p_playlist
->
p
->
p
_preparse
);
vlc_thread_join
(
p_playlist
->
p
->
p
_preparse
);
vlc_object_kill
(
p_playlist
->
p
->
p
_fetcher
);
vlc_thread_join
(
p_playlist
->
p
->
p
_fetcher
);
PL_LOCK
;
...
...
@@ -603,21 +603,21 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
*/
char
*
psz_arturl
=
input_item_GetArtURL
(
p_current
);
char
*
psz_name
=
input_item_GetName
(
p_current
);
if
(
p_playlist
->
p_fetcher
->
i_art_policy
==
ALBUM_ART_ALL
&&
if
(
p_playlist
->
p
->
p
_fetcher
->
i_art_policy
==
ALBUM_ART_ALL
&&
(
!
psz_arturl
||
strncmp
(
psz_arturl
,
"file://"
,
7
)
)
)
{
PL_DEBUG
(
"meta ok for %s, need to fetch art"
,
psz_name
);
vlc_object_lock
(
p_playlist
->
p_fetcher
);
if
(
vlc_object_alive
(
p_playlist
->
p_fetcher
)
)
vlc_object_lock
(
p_playlist
->
p
->
p
_fetcher
);
if
(
vlc_object_alive
(
p_playlist
->
p
->
p
_fetcher
)
)
{
INSERT_ELEM
(
p_playlist
->
p_fetcher
->
pp_waiting
,
p_playlist
->
p_fetcher
->
i_waiting
,
p_playlist
->
p_fetcher
->
i_waiting
,
p_current
);
vlc_object_signal_unlocked
(
p_playlist
->
p_fetcher
);
INSERT_ELEM
(
p_playlist
->
p
->
p
_fetcher
->
pp_waiting
,
p_playlist
->
p
->
p
_fetcher
->
i_waiting
,
p_playlist
->
p
->
p
_fetcher
->
i_waiting
,
p_current
);
vlc_object_signal_unlocked
(
p_playlist
->
p
->
p
_fetcher
);
}
else
vlc_gc_decref
(
p_current
);
vlc_object_unlock
(
p_playlist
->
p_fetcher
);
vlc_object_unlock
(
p_playlist
->
p
->
p
_fetcher
);
}
else
{
...
...
src/playlist/playlist_internal.h
View file @
bad878b5
...
...
@@ -37,6 +37,12 @@
#include "input/input_internal.h"
#include <assert.h>
struct
playlist_private_t
{
playlist_preparse_t
*
p_preparse
;
/**< Preparser object */
playlist_fetcher_t
*
p_fetcher
;
/**< Meta and art fetcher object */
};
struct
playlist_preparse_t
{
VLC_COMMON_MEMBERS
...
...
src/playlist/thread.c
View file @
bad878b5
...
...
@@ -60,57 +60,57 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent )
// Preparse
static
const
char
ppname
[]
=
"preparser"
;
p_playlist
->
p_preparse
=
p_playlist
->
p
->
p
_preparse
=
vlc_custom_create
(
p_playlist
,
sizeof
(
playlist_preparse_t
),
VLC_OBJECT_GENERIC
,
ppname
);
if
(
!
p_playlist
->
p_preparse
)
if
(
!
p_playlist
->
p
->
p
_preparse
)
{
msg_Err
(
p_playlist
,
"unable to create preparser"
);
vlc_object_release
(
p_playlist
);
return
;
}
p_playlist
->
p_preparse
->
psz_object_name
=
strdup
(
"preparser"
);
p_playlist
->
p_preparse
->
i_waiting
=
0
;
p_playlist
->
p_preparse
->
pp_waiting
=
NULL
;
p_playlist
->
p
->
p
_preparse
->
psz_object_name
=
strdup
(
"preparser"
);
p_playlist
->
p
->
p
_preparse
->
i_waiting
=
0
;
p_playlist
->
p
->
p
_preparse
->
pp_waiting
=
NULL
;
vlc_object_set_destructor
(
p_playlist
->
p_preparse
,
PreparseDestructor
);
vlc_object_set_destructor
(
p_playlist
->
p
->
p
_preparse
,
PreparseDestructor
);
vlc_object_attach
(
p_playlist
->
p_preparse
,
p_playlist
);
if
(
vlc_thread_create
(
p_playlist
->
p_preparse
,
"preparser"
,
vlc_object_attach
(
p_playlist
->
p
->
p
_preparse
,
p_playlist
);
if
(
vlc_thread_create
(
p_playlist
->
p
->
p
_preparse
,
"preparser"
,
RunPreparse
,
VLC_THREAD_PRIORITY_LOW
,
true
)
)
{
msg_Err
(
p_playlist
,
"cannot spawn preparse thread"
);
vlc_object_release
(
p_playlist
->
p_preparse
);
vlc_object_release
(
p_playlist
->
p
->
p
_preparse
);
return
;
}
// Secondary Preparse
static
const
char
fname
[]
=
"fetcher"
;
p_playlist
->
p_fetcher
=
p_playlist
->
p
->
p
_fetcher
=
vlc_custom_create
(
p_playlist
,
sizeof
(
playlist_fetcher_t
),
VLC_OBJECT_GENERIC
,
fname
);
if
(
!
p_playlist
->
p_fetcher
)
if
(
!
p_playlist
->
p
->
p
_fetcher
)
{
msg_Err
(
p_playlist
,
"unable to create secondary preparser"
);
vlc_object_release
(
p_playlist
);
return
;
}
p_playlist
->
p_fetcher
->
psz_object_name
=
strdup
(
"fetcher"
);
p_playlist
->
p_fetcher
->
i_waiting
=
0
;
p_playlist
->
p_fetcher
->
pp_waiting
=
NULL
;
p_playlist
->
p_fetcher
->
i_art_policy
=
var_CreateGetInteger
(
p_playlist
,
p_playlist
->
p
->
p
_fetcher
->
psz_object_name
=
strdup
(
"fetcher"
);
p_playlist
->
p
->
p
_fetcher
->
i_waiting
=
0
;
p_playlist
->
p
->
p
_fetcher
->
pp_waiting
=
NULL
;
p_playlist
->
p
->
p
_fetcher
->
i_art_policy
=
var_CreateGetInteger
(
p_playlist
,
"album-art"
);
vlc_object_set_destructor
(
p_playlist
->
p_fetcher
,
FetcherDestructor
);
vlc_object_set_destructor
(
p_playlist
->
p
->
p
_fetcher
,
FetcherDestructor
);
vlc_object_attach
(
p_playlist
->
p_fetcher
,
p_playlist
);
if
(
vlc_thread_create
(
p_playlist
->
p_fetcher
,
vlc_object_attach
(
p_playlist
->
p
->
p
_fetcher
,
p_playlist
);
if
(
vlc_thread_create
(
p_playlist
->
p
->
p
_fetcher
,
"fetcher"
,
RunFetcher
,
VLC_THREAD_PRIORITY_LOW
,
true
)
)
{
msg_Err
(
p_playlist
,
"cannot spawn secondary preparse thread"
);
vlc_object_release
(
p_playlist
->
p_fetcher
);
vlc_object_release
(
p_playlist
->
p
->
p
_fetcher
);
return
;
}
...
...
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