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
e7e8927b
Commit
e7e8927b
authored
Oct 04, 2008
by
Lukas Durfina
Committed by
Pierre d'Herbemont
Oct 11, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libvlc: better title/chapter handling
Signed-off-by:
Pierre d'Herbemont
<
pdherbemont@videolan.org
>
parent
d7fc7b2d
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
201 additions
and
12 deletions
+201
-12
include/vlc/libvlc.h
include/vlc/libvlc.h
+63
-9
include/vlc/libvlc_events.h
include/vlc/libvlc_events.h
+7
-1
src/control/event.c
src/control/event.c
+1
-0
src/control/media_player.c
src/control/media_player.c
+124
-2
src/libvlc.sym
src/libvlc.sym
+6
-0
No files found.
include/vlc/libvlc.h
View file @
e7e8927b
...
...
@@ -268,7 +268,7 @@ VLC_PUBLIC_API void libvlc_media_add_option(
/**
* Retain a reference to a media descriptor object (libvlc_media_t). Use
* libvlc_media_release() to decrement the reference count of a
* libvlc_media_release() to decrement the reference count of a
* media descriptor object.
*
* \param p_meta_desc a media descriptor object.
...
...
@@ -381,8 +381,8 @@ VLC_PUBLIC_API int
libvlc_exception_t
*
p_e
);
/**
* Sets media descriptor's user_data. user_data is specialized data
* accessed by the host application, VLC.framework uses it as a pointer to
* Sets media descriptor's user_data. user_data is specialized data
* accessed by the host application, VLC.framework uses it as a pointer to
* an native object that references a libvlc_media_t pointer
*
* \param p_md media descriptor object
...
...
@@ -395,8 +395,8 @@ VLC_PUBLIC_API void
libvlc_exception_t
*
p_e
);
/**
* Get media descriptor's user_data. user_data is specialized data
* accessed by the host application, VLC.framework uses it as a pointer to
* Get media descriptor's user_data. user_data is specialized data
* accessed by the host application, VLC.framework uses it as a pointer to
* an native object that references a libvlc_media_t pointer
*
* \param p_md media descriptor object
...
...
@@ -439,8 +439,8 @@ VLC_PUBLIC_API libvlc_media_player_t * libvlc_media_player_new_from_media( libvl
/**
* Release a media_player after use
* Decrement the reference count of a media player object. If the
* reference count is 0, then libvlc_media_player_release() will
* release the media player object. If the media player object
* reference count is 0, then libvlc_media_player_release() will
* release the media player object. If the media player object
* has been released, then it should not be used again.
*
* \param p_mi the Media Player to free
...
...
@@ -455,7 +455,7 @@ VLC_PUBLIC_API void libvlc_media_player_release( libvlc_media_player_t * );
*/
VLC_PUBLIC_API
void
libvlc_media_player_retain
(
libvlc_media_player_t
*
);
/**
/**
* Set the media that will be used by the media_player. If any,
* previous md will be released.
*
...
...
@@ -605,6 +605,60 @@ VLC_PUBLIC_API int libvlc_media_player_get_chapter( libvlc_media_player_t *, lib
VLC_PUBLIC_API
int
libvlc_media_player_get_chapter_count
(
libvlc_media_player_t
*
,
libvlc_exception_t
*
);
VLC_PUBLIC_API
int
libvlc_media_player_will_play
(
libvlc_media_player_t
*
,
libvlc_exception_t
*
);
/**
* Get title chapter count
*
* \param p_mi the Media Player
* \param i_title title
* \param p_e an initialized exception pointer
* \return number of chapters in title
*/
VLC_PUBLIC_API
int
libvlc_media_player_get_chapter_count_for_title
(
libvlc_media_player_t
*
,
int
,
libvlc_exception_t
*
);
/**
* Set movie title
*
* \param p_mi the Media Player
* \param i_title title number to play
* \param p_e an initialized exception pointer
*/
VLC_PUBLIC_API
void
libvlc_media_player_set_title
(
libvlc_media_player_t
*
,
int
,
libvlc_exception_t
*
);
/**
* Get movie title
*
* \param p_mi the Media Player
* \param p_e an initialized exception pointer
* \return title number currently playing
*/
VLC_PUBLIC_API
int
libvlc_media_player_get_title
(
libvlc_media_player_t
*
,
libvlc_exception_t
*
);
/**
* Get movie title count
*
* \param p_mi the Media Player
* \param p_e an initialized exception pointer
* \return title number count
*/
VLC_PUBLIC_API
int
libvlc_media_player_get_title_count
(
libvlc_media_player_t
*
,
libvlc_exception_t
*
);
/**
* Set previous chapter
*
* \param p_mi the Media Player
* \param p_e an initialized exception pointer
*/
VLC_PUBLIC_API
void
libvlc_media_player_previous_chapter
(
libvlc_media_player_t
*
,
libvlc_exception_t
*
);
/**
* Set next chapter
*
* \param p_mi the Media Player
* \param p_e an initialized exception pointer
*/
VLC_PUBLIC_API
void
libvlc_media_player_next_chapter
(
libvlc_media_player_t
*
,
libvlc_exception_t
*
);
/**
* Get movie play rate
*
...
...
@@ -1052,7 +1106,7 @@ VLC_PUBLIC_API void
/**
* Retain a reference to a media library object. This function will
* increment the reference counting for this object. Use
* increment the reference counting for this object. Use
* libvlc_media_library_release() to decrement the reference count.
*
* \param p_mlib media library object
...
...
include/vlc/libvlc_events.h
View file @
e7e8927b
...
...
@@ -82,7 +82,9 @@ typedef enum libvlc_event_type_t {
libvlc_MediaListPlayerStopped
,
libvlc_MediaDiscovererStarted
,
libvlc_MediaDiscovererEnded
libvlc_MediaDiscovererEnded
,
libvlc_MediaPlayerTitleChanged
}
libvlc_event_type_t
;
...
...
@@ -135,6 +137,10 @@ typedef struct libvlc_event_t
libvlc_time_t
new_time
;
}
media_player_time_changed
;
struct
{
int
new_title
;
}
media_player_title_changed
;
struct
{
libvlc_time_t
new_seekable
;
}
media_player_seekable_changed
;
...
...
src/control/event.c
View file @
e7e8927b
...
...
@@ -249,6 +249,7 @@ static const char event_type_to_name[][35] =
EVENT
(
libvlc_MediaPlayerBackward
),
EVENT
(
libvlc_MediaPlayerEndReached
),
EVENT
(
libvlc_MediaPlayerTimeChanged
),
EVENT
(
libvlc_MediaPlayerTitleChanged
),
EVENT
(
libvlc_MediaPlayerPositionChanged
),
EVENT
(
libvlc_MediaPlayerSeekableChanged
),
EVENT
(
libvlc_MediaPlayerPausableChanged
),
...
...
src/control/media_player.c
View file @
e7e8927b
...
...
@@ -370,6 +370,8 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,
libvlc_MediaPlayerPositionChanged
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerTimeChanged
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerTitleChanged
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerSeekableChanged
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
...
...
@@ -857,7 +859,7 @@ int libvlc_media_player_get_chapter(
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
-
1
.
0
;
return
-
1
;
var_Get
(
p_input_thread
,
"chapter"
,
&
val
);
vlc_object_release
(
p_input_thread
);
...
...
@@ -874,7 +876,7 @@ int libvlc_media_player_get_chapter_count(
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
-
1
.
0
;
return
-
1
;
var_Change
(
p_input_thread
,
"chapter"
,
VLC_VAR_CHOICESCOUNT
,
&
val
,
NULL
);
vlc_object_release
(
p_input_thread
);
...
...
@@ -882,6 +884,126 @@ int libvlc_media_player_get_chapter_count(
return
val
.
i_int
;
}
int
libvlc_media_player_get_chapter_count_for_title
(
libvlc_media_player_t
*
p_mi
,
int
i_title
,
libvlc_exception_t
*
p_e
)
{
input_thread_t
*
p_input_thread
;
vlc_value_t
val
;
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
-
1
;
char
*
psz_name
=
NULL
;
if
(
asprintf
(
psz_name
,
"title %2i"
,
i_title
)
==
-
1
)
{
vlc_object_release
(
p_input_thread
);
return
-
1
;
}
var_Change
(
p_input_thread
,
psz_name
,
VLC_VAR_CHOICESCOUNT
,
&
val
,
NULL
);
vlc_object_release
(
p_input_thread
);
free
(
psz_name
);
return
val
.
i_int
;
}
void
libvlc_media_player_set_title
(
libvlc_media_player_t
*
p_mi
,
int
i_title
,
libvlc_exception_t
*
p_e
)
{
input_thread_t
*
p_input_thread
;
vlc_value_t
val
;
val
.
i_int
=
i_title
;
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
;
var_Set
(
p_input_thread
,
"title"
,
val
);
vlc_object_release
(
p_input_thread
);
//send event
libvlc_event_t
event
;
event
.
type
=
libvlc_MediaPlayerTitleChanged
;
event
.
u
.
media_player_title_changed
.
new_title
=
i_title
;
libvlc_event_send
(
p_mi
->
p_event_manager
,
&
event
);
}
int
libvlc_media_player_get_title
(
libvlc_media_player_t
*
p_mi
,
libvlc_exception_t
*
p_e
)
{
input_thread_t
*
p_input_thread
;
vlc_value_t
val
;
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
-
1
;
var_Get
(
p_input_thread
,
"title"
,
&
val
);
vlc_object_release
(
p_input_thread
);
return
val
.
i_int
;
}
int
libvlc_media_player_get_title_count
(
libvlc_media_player_t
*
p_mi
,
libvlc_exception_t
*
p_e
)
{
input_thread_t
*
p_input_thread
;
vlc_value_t
val
;
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
-
1
;
var_Change
(
p_input_thread
,
"title"
,
VLC_VAR_CHOICESCOUNT
,
&
val
,
NULL
);
vlc_object_release
(
p_input_thread
);
return
val
.
i_int
;
}
void
libvlc_media_player_next_chapter
(
libvlc_media_player_t
*
p_mi
,
libvlc_exception_t
*
p_e
)
{
input_thread_t
*
p_input_thread
;
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
;
int
i_type
=
var_Type
(
p_input_thread
,
"next-chapter"
);
vlc_value_t
val
;
val
.
b_bool
=
true
;
var_Set
(
p_input_thread
,
(
i_type
&
VLC_VAR_TYPE
)
!=
0
?
"next-chapter"
:
"next-title"
,
val
);
vlc_object_release
(
p_input_thread
);
}
void
libvlc_media_player_previous_chapter
(
libvlc_media_player_t
*
p_mi
,
libvlc_exception_t
*
p_e
)
{
input_thread_t
*
p_input_thread
;
p_input_thread
=
libvlc_get_input_thread
(
p_mi
,
p_e
);
if
(
!
p_input_thread
)
return
;
int
i_type
=
var_Type
(
p_input_thread
,
"next-chapter"
);
vlc_value_t
val
;
val
.
b_bool
=
true
;
var_Set
(
p_input_thread
,
(
i_type
&
VLC_VAR_TYPE
)
!=
0
?
"prev-chapter"
:
"prev-title"
,
val
);
vlc_object_release
(
p_input_thread
);
}
float
libvlc_media_player_get_fps
(
libvlc_media_player_t
*
p_mi
,
libvlc_exception_t
*
p_e
)
...
...
src/libvlc.sym
View file @
e7e8927b
...
...
@@ -110,6 +110,7 @@ libvlc_media_player_destroy
libvlc_media_player_event_manager
libvlc_media_player_get_chapter
libvlc_media_player_get_chapter_count
libvlc_media_player_get_chapter_count_for_title
libvlc_media_player_get_drawable
libvlc_media_player_get_fps
libvlc_media_player_get_length
...
...
@@ -118,13 +119,17 @@ libvlc_media_player_get_position
libvlc_media_player_get_rate
libvlc_media_player_get_state
libvlc_media_player_get_time
libvlc_media_player_get_title
libvlc_media_player_get_title_count
libvlc_media_player_has_vout
libvlc_media_player_is_seekable
libvlc_media_player_new
libvlc_media_player_new_from_input_thread
libvlc_media_player_new_from_media
libvlc_media_player_next_chapter
libvlc_media_player_pause
libvlc_media_player_play
libvlc_media_player_previous_chapter
libvlc_media_player_release
libvlc_media_player_retain
libvlc_media_player_set_chapter
...
...
@@ -133,6 +138,7 @@ libvlc_media_player_set_media
libvlc_media_player_set_position
libvlc_media_player_set_rate
libvlc_media_player_set_time
libvlc_media_player_set_title
libvlc_media_player_stop
libvlc_media_player_will_play
libvlc_media_release
...
...
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