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
f297b344
Commit
f297b344
authored
Oct 22, 2007
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reference count libvlc. API break.
parent
edabc60f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
51 additions
and
13 deletions
+51
-13
include/vlc/libvlc.h
include/vlc/libvlc.h
+10
-3
src/control/core.c
src/control/core.c
+35
-8
src/control/libvlc_internal.h
src/control/libvlc_internal.h
+1
-0
src/control/mediacontrol_core.c
src/control/mediacontrol_core.c
+1
-1
src/control/testapi.c
src/control/testapi.c
+4
-1
No files found.
include/vlc/libvlc.h
View file @
f297b344
...
...
@@ -102,7 +102,7 @@ libvlc_exception_get_message( const libvlc_exception_t *p_exception );
*/
/**
* Create an initialized libvlc instance
* Create an initialized libvlc instance
.
* \param argc the number of arguments
* \param argv command-line-type arguments
* \param exception an initialized exception pointer
...
...
@@ -119,10 +119,17 @@ libvlc_new( int , const char *const *, libvlc_exception_t *);
VLC_PUBLIC_API
int
libvlc_get_vlc_id
(
libvlc_instance_t
*
p_instance
);
/**
* Destroy a libvlc instance.
* Decrements the reference count of a libvlc instance, and destroys it
* if it reaches zero.
* \param p_instance the instance to destroy
*/
VLC_PUBLIC_API
void
libvlc_destroy
(
libvlc_instance_t
*
,
libvlc_exception_t
*
);
VLC_PUBLIC_API
void
libvlc_release
(
libvlc_instance_t
*
,
libvlc_exception_t
*
);
/**
* Increments the reference count of a libvlc instance.
* The reference count is initially one when libvlc_new() returns.
*/
VLC_PUBLIC_API
void
libvlc_retain
(
libvlc_instance_t
*
);
/** @}*/
...
...
src/control/core.c
View file @
f297b344
...
...
@@ -20,12 +20,15 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include <stdarg.h>
#include "libvlc_internal.h"
#include <vlc/libvlc.h>
#include <vlc_interface.h>
#include <stdarg.h>
#include <limits.h>
#include <assert.h>
static
const
char
nomemstr
[]
=
"Insufficient memory"
;
/*************************************************************************
...
...
@@ -106,6 +109,7 @@ libvlc_instance_t * libvlc_new( int argc, const char *const *argv,
p_new
->
p_libvlc_int
=
p_libvlc_int
;
p_new
->
p_vlm
=
NULL
;
p_new
->
b_playlist_locked
=
0
;
p_new
->
ref_count
=
1
;
p_new
->
p_callback_list
=
NULL
;
vlc_mutex_init
(
p_libvlc_int
,
&
p_new
->
instance_lock
);
vlc_mutex_init
(
p_libvlc_int
,
&
p_new
->
event_callback_lock
);
...
...
@@ -115,14 +119,37 @@ libvlc_instance_t * libvlc_new( int argc, const char *const *argv,
return
p_new
;
}
void
libvlc_destroy
(
libvlc_instance_t
*
p_instance
,
libvlc_exception_t
*
p_e
)
void
libvlc_retain
(
libvlc_instance_t
*
p_instance
)
{
assert
(
p_instance
!=
NULL
);
assert
(
p_instance
->
ref_count
<
UINT_MAX
);
vlc_mutex_lock
(
&
p_instance
->
instance_lock
);
p_instance
->
ref_count
++
;
vlc_mutex_unlock
(
&
p_instance
->
instance_lock
);
}
void
libvlc_release
(
libvlc_instance_t
*
p_instance
,
libvlc_exception_t
*
p_e
)
{
libvlc_event_fini
(
p_instance
,
p_e
);
vlc_mutex_destroy
(
&
p_instance
->
instance_lock
);
vlc_mutex_destroy
(
&
p_instance
->
event_callback_lock
);
libvlc_InternalCleanup
(
p_instance
->
p_libvlc_int
);
libvlc_InternalDestroy
(
p_instance
->
p_libvlc_int
,
VLC_FALSE
);
free
(
p_instance
);
vlc_mutex_t
*
lock
=
&
p_instance
->
instance_lock
;
int
refs
;
assert
(
p_instance
->
ref_count
>
0
);
vlc_mutex_lock
(
&
p_instance
->
instance_lock
);
refs
=
--
p_instance
->
ref_count
;
if
(
refs
==
0
)
libvlc_event_fini
(
p_instance
,
p_e
);
vlc_mutex_unlock
(
&
p_instance
->
instance_lock
);
if
(
refs
==
0
)
{
vlc_mutex_destroy
(
&
p_instance
->
instance_lock
);
vlc_mutex_destroy
(
&
p_instance
->
event_callback_lock
);
libvlc_InternalCleanup
(
p_instance
->
p_libvlc_int
);
libvlc_InternalDestroy
(
p_instance
->
p_libvlc_int
,
VLC_FALSE
);
free
(
p_instance
);
}
}
int
libvlc_get_vlc_id
(
libvlc_instance_t
*
p_instance
)
...
...
src/control/libvlc_internal.h
View file @
f297b344
...
...
@@ -67,6 +67,7 @@ struct libvlc_instance_t
libvlc_int_t
*
p_libvlc_int
;
vlm_t
*
p_vlm
;
int
b_playlist_locked
;
unsigned
ref_count
;
vlc_mutex_t
instance_lock
;
vlc_mutex_t
event_callback_lock
;
struct
libvlc_callback_entry_list_t
*
p_callback_list
;
...
...
src/control/mediacontrol_core.c
View file @
f297b344
...
...
@@ -88,7 +88,7 @@ mediacontrol_exit( mediacontrol_Instance *self )
libvlc_exception_t
ex
;
libvlc_exception_init
(
&
ex
);
libvlc_
destroy
(
self
->
p_instance
,
&
ex
);
libvlc_
release
(
self
->
p_instance
,
&
ex
);
}
libvlc_instance_t
*
...
...
src/control/testapi.c
View file @
f297b344
...
...
@@ -74,7 +74,10 @@ int main (int argc, char *argv[])
libvlc_playlist_clear
(
vlc
,
&
ex
);
catch
();
libvlc_destroy
(
vlc
,
&
ex
);
libvlc_retain
(
vlc
);
libvlc_release
(
vlc
,
&
ex
);
catch
();
libvlc_release
(
vlc
,
&
ex
);
catch
();
return
0
;
}
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