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
b28e4125
Commit
b28e4125
authored
Dec 18, 2006
by
Clément Stenac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
A bit of cleanup in libvlc playlist API. Preliminary work for: Refs:#457
parent
49a7dec5
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
61 additions
and
33 deletions
+61
-33
include/vlc/libvlc.h
include/vlc/libvlc.h
+4
-2
include/vlc/vlc.h
include/vlc/vlc.h
+2
-0
src/control/playlist.c
src/control/playlist.c
+13
-20
src/playlist/item.c
src/playlist/item.c
+17
-11
src/playlist/playlist_internal.h
src/playlist/playlist_internal.h
+2
-0
src/playlist/search.c
src/playlist/search.c
+23
-0
No files found.
include/vlc/libvlc.h
View file @
b28e4125
...
...
@@ -51,6 +51,7 @@ extern "C" {
struct
libvlc_exception_t
{
int
b_raised
;
int
i_code
;
char
*
psz_message
;
};
typedef
struct
libvlc_exception_t
libvlc_exception_t
;
...
...
@@ -142,7 +143,8 @@ void libvlc_destroy( libvlc_instance_t *, libvlc_exception_t * );
/**
* Set loop variable
*/
void
libvlc_playlist_loop
(
libvlc_instance_t
*
,
vlc_bool_t
,
libvlc_exception_t
*
);
void
libvlc_playlist_loop
(
libvlc_instance_t
*
,
vlc_bool_t
,
libvlc_exception_t
*
);
/**
* Start playing. You can give some additionnal playlist item options
...
...
@@ -233,7 +235,7 @@ int libvlc_playlist_add_extended( libvlc_instance_t *, const char *,
const
char
*
,
int
,
const
char
**
,
libvlc_exception_t
*
);
/**
/**
* Delete the playlist item with the given ID.
* \param p_instance the instance
* \param i_id the id to remove
...
...
include/vlc/vlc.h
View file @
b28e4125
...
...
@@ -122,6 +122,8 @@ struct vlc_list_t
#define VLC_ENOVAR -30
/* Variable not found */
#define VLC_EBADVAR -31
/* Bad variable value */
#define VLC_ENOITEM -40
/**< Item not found */
#define VLC_EEXIT -255
/* Program exited */
#define VLC_EEXITSUCCESS -999
/* Program exited successfully */
#define VLC_EGENERIC -666
/* Generic error */
...
...
src/control/playlist.c
View file @
b28e4125
...
...
@@ -27,13 +27,15 @@
#include <assert.h>
#include "../playlist/playlist_internal.h"
#define PL p_instance->p_libvlc_int->p_playlist
void
libvlc_playlist_loop
(
libvlc_instance_t
*
p_instance
,
vlc_bool_t
loop
,
libvlc_exception_t
*
p_e
)
{
assert
(
PL
);
var_SetBool
(
PL
,
"loop"
,
loop
);
var_SetBool
(
PL
,
"loop"
,
loop
);
}
void
libvlc_playlist_play
(
libvlc_instance_t
*
p_instance
,
int
i_id
,
...
...
@@ -46,7 +48,8 @@ void libvlc_playlist_play( libvlc_instance_t *p_instance, int i_id,
if
(
PL
->
items
.
i_size
==
0
)
RAISEVOID
(
"Empty playlist"
);
if
(
i_id
>
0
)
{
playlist_item_t
*
p_item
=
playlist_ItemGetById
(
PL
,
i_id
,
VLC_TRUE
);
playlist_item_t
*
p_item
=
playlist_ItemGetByInputId
(
PL
,
i_id
,
PL
->
status
.
p_node
);
if
(
!
p_item
)
RAISEVOID
(
"Unable to find item"
);
playlist_Control
(
PL
,
PLAYLIST_VIEWPLAY
,
VLC_FALSE
,
...
...
@@ -115,31 +118,21 @@ int libvlc_playlist_add_extended( libvlc_instance_t *p_instance,
i_options
,
1
);
}
int
libvlc_playlist_delete_item
(
libvlc_instance_t
*
p_instance
,
int
i_id
,
libvlc_exception_t
*
p_e
)
{
playlist_item_t
*
p_item
;
assert
(
PL
);
vlc_mutex_lock
(
&
PL
->
object_lock
);
p_item
=
playlist_ItemGetById
(
PL
,
i_id
,
VLC_TRUE
);
if
(
p_item
&&
p_item
->
p_input
)
{
int
i_ret
=
playlist_DeleteFromInput
(
PL
,
p_item
->
p_input
->
i_id
,
VLC_TRUE
);
if
(
i_ret
)
{
libvlc_exception_raise
(
p_e
,
"delete failed"
);
vlc_mutex_unlock
(
&
PL
->
object_lock
);
return
VLC_EGENERIC
;
}
else
{
vlc_mutex_unlock
(
&
PL
->
object_lock
);
return
VLC_SUCCESS
;
}
if
(
playlist_DeleteFromInput
(
PL
,
i_id
,
VLC_FALSE
)
)
{
libvlc_exception_raise
(
p_e
,
"deletion failed"
);
return
VLC_ENOITEM
;
}
libvlc_exception_raise
(
p_e
,
"item not found"
);
vlc_mutex_unlock
(
&
PL
->
object_lock
);
return
VLC_EGENERIC
;
return
VLC_SUCCESS
;
}
int
libvlc_playlist_isplaying
(
libvlc_instance_t
*
p_instance
,
libvlc_exception_t
*
p_e
)
{
...
...
src/playlist/item.c
View file @
b28e4125
...
...
@@ -113,13 +113,15 @@ static int DeleteFromInput( playlist_t *p_playlist, int i_input_id,
int
playlist_DeleteFromInput
(
playlist_t
*
p_playlist
,
int
i_input_id
,
vlc_bool_t
b_locked
)
{
int
i_ret1
,
i_ret2
;
if
(
!
b_locked
)
PL_LOCK
;
DeleteFromInput
(
p_playlist
,
i_input_id
,
p_playlist
->
p_root_category
,
VLC_TRUE
);
DeleteFromInput
(
p_playlist
,
i_input_id
,
i_ret1
=
DeleteFromInput
(
p_playlist
,
i_input_id
,
p_playlist
->
p_root_category
,
VLC_TRUE
);
i_ret2
=
DeleteFromInput
(
p_playlist
,
i_input_id
,
p_playlist
->
p_root_onelevel
,
VLC_TRUE
);
if
(
!
b_locked
)
PL_UNLOCK
;
return
VLC_SUCCESS
;
return
(
i_ret1
==
VLC_SUCCESS
||
i_ret2
==
VLC_SUCCESS
)
?
VLC_SUCCESS
:
VLC_ENOITEM
;
}
void
playlist_Clear
(
playlist_t
*
p_playlist
,
vlc_bool_t
b_locked
)
...
...
@@ -182,11 +184,15 @@ int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri,
mtime_t
i_duration
,
const
char
*
const
*
ppsz_options
,
int
i_options
,
vlc_bool_t
b_playlist
)
{
int
i_ret
;
input_item_t
*
p_input
=
input_ItemNewExt
(
p_playlist
,
psz_uri
,
psz_name
,
i_options
,
ppsz_options
,
i_duration
);
return
playlist_AddInput
(
p_playlist
,
p_input
,
i_mode
,
i_pos
,
b_playlist
);
i_ret
=
playlist_AddInput
(
p_playlist
,
p_input
,
i_mode
,
i_pos
,
b_playlist
);
if
(
i_ret
==
VLC_SUCCESS
)
return
p_input
->
i_id
;
return
-
1
;
}
/** Add an input item to the playlist node */
...
...
@@ -199,25 +205,25 @@ int playlist_AddInput( playlist_t* p_playlist, input_item_t *p_input,
PL_DEBUG
(
"adding item `%s' ( %s )"
,
p_input
->
psz_name
,
p_input
->
psz_uri
);
vlc_mutex_lock
(
&
p_playlist
->
object_lock
)
;
PL_LOCK
;
/* Add to ONELEVEL */
p_item_one
=
playlist_ItemNewFromInput
(
p_playlist
,
p_input
);
if
(
p_item_one
==
NULL
)
return
VLC_E
GENERIC
;
if
(
p_item_one
==
NULL
)
return
VLC_E
NOMEM
;
AddItem
(
p_playlist
,
p_item_one
,
b_playlist
?
p_playlist
->
p_local_onelevel
:
p_playlist
->
p_ml_onelevel
,
i_mode
,
i_pos
);
/* Add to CATEGORY */
p_item_cat
=
playlist_ItemNewFromInput
(
p_playlist
,
p_input
);
if
(
p_item_cat
==
NULL
)
return
VLC_E
GENERIC
;
if
(
p_item_cat
==
NULL
)
return
VLC_E
NOMEM
;
AddItem
(
p_playlist
,
p_item_cat
,
b_playlist
?
p_playlist
->
p_local_category
:
p_playlist
->
p_ml_category
,
i_mode
,
i_pos
);
GoAndPreparse
(
p_playlist
,
i_mode
,
p_item_cat
,
p_item_one
);
vlc_mutex_unlock
(
&
p_playlist
->
object_lock
)
;
PL_UNLOCK
;
return
VLC_SUCCESS
;
}
...
...
@@ -236,13 +242,13 @@ int playlist_BothAddInput( playlist_t *p_playlist,
/* Add to category */
p_item_cat
=
playlist_ItemNewFromInput
(
p_playlist
,
p_input
);
if
(
p_item_cat
==
NULL
)
return
VLC_E
GENERIC
;
if
(
p_item_cat
==
NULL
)
return
VLC_E
NOMEM
;
AddItem
(
p_playlist
,
p_item_cat
,
p_direct_parent
,
i_mode
,
i_pos
);
/* Add to onelevel */
/** \todo make a faster case for ml import */
p_item_one
=
playlist_ItemNewFromInput
(
p_playlist
,
p_input
);
if
(
p_item_one
==
NULL
)
return
VLC_E
GENERIC
;
if
(
p_item_one
==
NULL
)
return
VLC_E
NOMEM
;
p_up
=
p_direct_parent
;
while
(
p_up
->
p_parent
!=
p_playlist
->
p_root_category
)
...
...
src/playlist/playlist_internal.h
View file @
b28e4125
...
...
@@ -110,6 +110,8 @@ playlist_item_t *playlist_GetLastLeaf( playlist_t *p_playlist,
int
playlist_DeleteFromItemId
(
playlist_t
*
,
int
);
int
playlist_ItemDelete
(
playlist_item_t
*
);
playlist_item_t
*
playlist_ItemGetByInputId
(
playlist_t
*
,
int
,
playlist_item_t
*
);
/**
* @}
*/
...
...
src/playlist/search.c
View file @
b28e4125
...
...
@@ -81,6 +81,29 @@ playlist_item_t * playlist_ItemGetByInput( playlist_t * p_playlist ,
return
NULL
;
}
/** Find the playlist item matching the input id under the given node */
playlist_item_t
*
playlist_ItemGetByInputId
(
playlist_t
*
p_playlist
,
int
i_input_id
,
playlist_item_t
*
p_root
)
{
int
i
;
assert
(
p_root
!=
NULL
);
for
(
i
=
0
;
i
<
p_root
->
i_children
;
i
++
)
{
if
(
p_root
->
pp_children
[
i
]
->
i_children
==
-
1
&&
p_root
->
pp_children
[
i
]
->
p_input
->
i_id
==
i_input_id
)
{
return
p_root
->
pp_children
[
i
];
}
else
if
(
p_root
->
pp_children
[
i
]
->
i_children
>=
0
)
{
return
playlist_ItemGetByInputId
(
p_playlist
,
i_input_id
,
p_root
->
pp_children
[
i
]
);
}
}
return
NULL
;
}
/***************************************************************************
* Live search handling
***************************************************************************/
...
...
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