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
1ef06cd3
Commit
1ef06cd3
authored
Sep 16, 2009
by
Pierre d'Herbemont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
libvlc: Add some shortcuts in media_player.c and do some cleanup.
No functional changes.
parent
a9dfcaad
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
119 additions
and
115 deletions
+119
-115
src/control/media_player.c
src/control/media_player.c
+119
-115
No files found.
src/control/media_player.c
View file @
1ef06cd3
...
...
@@ -54,11 +54,38 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_userdata
);
static
int
SnapshotTakenCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
);
static
int
snapshot_was_taken
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
);
static
void
libvlc_media_player_destroy
(
libvlc_media_player_t
*
p_mi
);
/*
* Shortcuts
*/
#define register_event(a, b) __register_event(a, libvlc_MediaPlayer ## b)
static
inline
void
__register_event
(
libvlc_media_player_t
*
mp
,
libvlc_event_type_t
type
)
{
libvlc_event_manager_register_event_type
(
mp
->
p_event_manager
,
type
,
NULL
);
}
static
inline
void
lock
(
libvlc_media_player_t
*
mp
)
{
vlc_mutex_lock
(
&
mp
->
object_lock
);
}
static
inline
void
unlock
(
libvlc_media_player_t
*
mp
)
{
vlc_mutex_unlock
(
&
mp
->
object_lock
);
}
static
inline
void
clear_if_needed
(
libvlc_exception_t
*
e
)
{
if
(
libvlc_exception_raised
(
e
))
libvlc_exception_clear
(
e
);
}
/*
* Release the associated input thread.
*
...
...
@@ -112,18 +139,18 @@ input_thread_t *libvlc_get_input_thread( libvlc_media_player_t *p_mi,
if
(
!
p_mi
)
RAISENULL
(
"Media Instance is NULL"
);
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
if
(
!
p_mi
->
p_input_thread
)
{
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
RAISENULL
(
"Input is NULL"
);
}
p_input_thread
=
p_mi
->
p_input_thread
;
vlc_object_hold
(
p_input_thread
);
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
return
p_input_thread
;
}
...
...
@@ -253,8 +280,29 @@ input_event_changed( vlc_object_t * p_this, char const * psz_cmd,
}
/**************************************************************************
* Snapshot Taken Event.
*
* FIXME: This snapshot API interface makes no sense in media_player.
*************************************************************************/
static
int
snapshot_was_taken
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_this
);
libvlc_media_player_t
*
mp
=
p_data
;
libvlc_event_t
event
;
event
.
type
=
libvlc_MediaPlayerSnapshotTaken
;
event
.
u
.
media_player_snapshot_taken
.
psz_filename
=
newval
.
psz_string
;
libvlc_event_send
(
mp
->
p_event_manager
,
&
event
);
return
VLC_SUCCESS
;
}
static
void
libvlc_media_player_destroy
(
libvlc_media_player_t
*
);
/**************************************************************************
* Create a Media Instance object.
*
...
...
@@ -270,85 +318,67 @@ static void libvlc_media_player_destroy( libvlc_media_player_t * );
* - When attempting to destroy the object the lock is also held.
**************************************************************************/
libvlc_media_player_t
*
libvlc_media_player_new
(
libvlc_instance_t
*
p_libvlc_instance
,
libvlc_exception_t
*
p_e
)
libvlc_media_player_new
(
libvlc_instance_t
*
instance
,
libvlc_exception_t
*
e
)
{
libvlc_media_player_t
*
p_mi
;
libvlc_media_player_t
*
mp
;
assert
(
p_libvlc_instance
);
assert
(
instance
);
p_mi
=
malloc
(
sizeof
(
libvlc_media_player_t
)
);
if
(
!
p_mi
)
mp
=
malloc
(
sizeof
(
libvlc_media_player_t
)
);
if
(
!
mp
)
{
libvlc_exception_raise
(
p_e
);
libvlc_printerr
(
"Not enough memory"
);
libvlc_exception_raise
(
e
);
libvlc_printerr
(
"Not enough memory"
);
return
NULL
;
}
p_mi
->
p_md
=
NULL
;
p_mi
->
drawable
.
agl
=
0
;
p_mi
->
drawable
.
xid
=
0
;
p_mi
->
drawable
.
hwnd
=
NULL
;
p_mi
->
drawable
.
nsobject
=
NULL
;
p_mi
->
p_libvlc_instance
=
p_libvlc_instance
;
p_mi
->
p_input_thread
=
NULL
;
p_mi
->
p_input_resource
=
NULL
;
p_mi
->
i_refcount
=
1
;
vlc_mutex_init
(
&
p_mi
->
object_lock
);
p_mi
->
p_event_manager
=
libvlc_event_manager_new
(
p_mi
,
p_libvlc_instance
,
p_e
);
if
(
libvlc_exception_raised
(
p_e
)
)
mp
->
p_md
=
NULL
;
mp
->
drawable
.
agl
=
0
;
mp
->
drawable
.
xid
=
0
;
mp
->
drawable
.
hwnd
=
NULL
;
mp
->
drawable
.
nsobject
=
NULL
;
mp
->
p_libvlc_instance
=
instance
;
mp
->
p_input_thread
=
NULL
;
mp
->
p_input_resource
=
NULL
;
mp
->
i_refcount
=
1
;
vlc_mutex_init
(
&
mp
->
object_lock
);
mp
->
p_event_manager
=
libvlc_event_manager_new
(
mp
,
instance
,
e
);
if
(
libvlc_exception_raised
(
e
))
{
vlc_mutex_destroy
(
&
p_mi
->
object_lock
);
free
(
p_mi
);
vlc_mutex_destroy
(
&
mp
->
object_lock
);
free
(
mp
);
return
NULL
;
}
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerNothingSpecial
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerOpening
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerBuffering
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerPlaying
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerPaused
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerStopped
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerForward
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerBackward
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerEndReached
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerEncounteredError
,
p_e
);
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
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_MediaPlayerLengthChanged
,
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
,
libvlc_MediaPlayerPausableChanged
,
p_e
);
register_event
(
mp
,
NothingSpecial
);
register_event
(
mp
,
Opening
);
register_event
(
mp
,
Buffering
);
register_event
(
mp
,
Playing
);
register_event
(
mp
,
Paused
);
register_event
(
mp
,
Stopped
);
register_event
(
mp
,
Forward
);
register_event
(
mp
,
Backward
);
register_event
(
mp
,
EndReached
);
register_event
(
mp
,
EncounteredError
);
register_event
(
mp
,
PositionChanged
);
register_event
(
mp
,
TimeChanged
);
register_event
(
mp
,
LengthChanged
);
register_event
(
mp
,
TitleChanged
);
register_event
(
mp
,
PausableChanged
);
/* Snapshot initialization */
libvlc_event_manager_register_event_type
(
p_mi
->
p_event_manager
,
libvlc_MediaPlayerSnapshotTaken
,
p_e
);
register_event
(
mp
,
SnapshotTaken
);
/* Attach a var callback to the global object to provide the glue between
vout_thread that generates the event and media_player that re-emits it
with its own event manager
*/
var_AddCallback
(
p_libvlc_instance
->
p_libvlc_int
,
"snapshot-file"
,
SnapshotTakenCallback
,
p_mi
);
return
p_mi
;
* vout_thread that generates the event and media_player that re-emits it
* with its own event manager
*
* FIXME: It's unclear why we want to put this in public API, and why we
* want to expose it in such a limiting and ugly way.
*/
var_AddCallback
(
instance
->
p_libvlc_int
,
"snapshot-file"
,
snapshot_was_taken
,
mp
);
return
mp
;
}
/**************************************************************************
...
...
@@ -382,7 +412,7 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
/* Detach Callback from the main libvlc object */
var_DelCallback
(
p_mi
->
p_libvlc_instance
->
p_libvlc_int
,
"snapshot-file"
,
SnapshotTakenCallback
,
p_mi
);
"snapshot-file"
,
snapshot_was_taken
,
p_mi
);
/* Release the input thread */
release_input_thread
(
p_mi
,
true
);
...
...
@@ -409,9 +439,9 @@ void libvlc_media_player_release( libvlc_media_player_t *p_mi )
bool
destroy
;
assert
(
p_mi
);
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
destroy
=
!--
p_mi
->
i_refcount
;
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
if
(
destroy
)
libvlc_media_player_destroy
(
p_mi
);
...
...
@@ -426,9 +456,9 @@ void libvlc_media_player_retain( libvlc_media_player_t *p_mi )
{
assert
(
p_mi
);
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
p_mi
->
i_refcount
++
;
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
}
/**************************************************************************
...
...
@@ -446,7 +476,7 @@ void libvlc_media_player_set_media(
if
(
!
p_mi
)
return
;
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
/* FIXME I am not sure if it is a user request or on die(eof/error)
* request here */
...
...
@@ -463,7 +493,7 @@ void libvlc_media_player_set_media(
if
(
!
p_md
)
{
p_mi
->
p_md
=
NULL
;
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
return
;
/* It is ok to pass a NULL md */
}
...
...
@@ -474,7 +504,7 @@ void libvlc_media_player_set_media(
* libvlc_instance, because we don't really care */
p_mi
->
p_libvlc_instance
=
p_md
->
p_libvlc_instance
;
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
}
/**************************************************************************
...
...
@@ -488,11 +518,11 @@ libvlc_media_player_get_media(
libvlc_media_t
*
p_m
;
VLC_UNUSED
(
p_e
);
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
p_m
=
p_mi
->
p_md
;
if
(
p_m
)
libvlc_media_retain
(
p_mi
->
p_md
);
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
return
p_mi
->
p_md
;
}
...
...
@@ -509,29 +539,6 @@ libvlc_media_player_event_manager(
return
p_mi
->
p_event_manager
;
}
/**************************************************************************
* Trigger a snapshot Taken Event.
*************************************************************************/
static
int
SnapshotTakenCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_cmd
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_this
)
;
libvlc_media_player_t
*
p_mi
=
(
libvlc_media_player_t
*
)
p_data
;
libvlc_event_t
event
;
event
.
type
=
libvlc_MediaPlayerSnapshotTaken
;
event
.
u
.
media_player_snapshot_taken
.
psz_filename
=
newval
.
psz_string
;
/* Snapshot psz data is a vlc_variable owned by libvlc object .
Its memmory management is taken care by the obj*/
msg_Dbg
(
p_this
,
"about to emit libvlc_snapshot_taken.make psz_str=0x%p"
" (%s)"
,
event
.
u
.
media_player_snapshot_taken
.
psz_filename
,
event
.
u
.
media_player_snapshot_taken
.
psz_filename
);
libvlc_event_send
(
p_mi
->
p_event_manager
,
&
event
);
return
VLC_SUCCESS
;
}
/**************************************************************************
* Tell media player to start playing.
**************************************************************************/
...
...
@@ -551,11 +558,11 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
/* Ignore previous exception */
libvlc_exception_clear
(
p_e
);
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
if
(
!
p_mi
->
p_md
)
{
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
libvlc_exception_raise
(
p_e
);
libvlc_printerr
(
"No associated media descriptor"
);
return
;
...
...
@@ -566,7 +573,7 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
if
(
!
p_mi
->
p_input_thread
)
{
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
return
;
}
...
...
@@ -599,7 +606,7 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
p_mi
->
p_input_thread
=
NULL
;
}
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
}
/**************************************************************************
...
...
@@ -660,9 +667,9 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi,
libvlc_event_send
(
p_mi
->
p_event_manager
,
&
event
);
}
vlc_mutex_lock
(
&
p_mi
->
object_lock
);
lock
(
p_mi
);
release_input_thread
(
p_mi
,
true
);
/* This will stop the input thread */
vlc_mutex_unlock
(
&
p_mi
->
object_lock
);
unlock
(
p_mi
);
}
/**************************************************************************
...
...
@@ -1080,8 +1087,7 @@ libvlc_state_t libvlc_media_player_get_state(
if
(
!
p_input_thread
)
{
/* We do return the right value, no need to throw an exception */
if
(
libvlc_exception_raised
(
p_e
)
)
libvlc_exception_clear
(
p_e
);
clear_if_needed
(
p_e
);
return
state
;
}
...
...
@@ -1107,8 +1113,7 @@ int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi,
if
(
!
p_input_thread
)
{
/* We do return the right value, no need to throw an exception */
if
(
libvlc_exception_raised
(
p_e
)
)
libvlc_exception_clear
(
p_e
);
clear_if_needed
(
p_e
);
return
false
;
}
b_seekable
=
var_GetBool
(
p_input_thread
,
"can-seek"
);
...
...
@@ -1201,8 +1206,7 @@ int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi,
if
(
!
p_input_thread
)
{
/* We do return the right value, no need to throw an exception */
if
(
libvlc_exception_raised
(
p_e
)
)
libvlc_exception_clear
(
p_e
);
clear_if_needed
(
p_e
);
return
false
;
}
b_can_pause
=
var_GetBool
(
p_input_thread
,
"can-pause"
);
...
...
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