25 changed files with 0 additions and 3919 deletions
@ -1,5 +0,0 @@ |
|||
Doxyfile |
|||
INSTALL |
|||
admin |
|||
doc |
|||
config.status |
|||
@ -1 +0,0 @@ |
|||
Rémi Denis-Courmont <rem (at) videolan (dot) org> |
|||
@ -1,340 +0,0 @@ |
|||
GNU GENERAL PUBLIC LICENSE |
|||
Version 2, June 1991 |
|||
|
|||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
|||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
Everyone is permitted to copy and distribute verbatim copies |
|||
of this license document, but changing it is not allowed. |
|||
|
|||
Preamble |
|||
|
|||
The licenses for most software are designed to take away your |
|||
freedom to share and change it. By contrast, the GNU General Public |
|||
License is intended to guarantee your freedom to share and change free |
|||
software--to make sure the software is free for all its users. This |
|||
General Public License applies to most of the Free Software |
|||
Foundation's software and to any other program whose authors commit to |
|||
using it. (Some other Free Software Foundation software is covered by |
|||
the GNU Library General Public License instead.) You can apply it to |
|||
your programs, too. |
|||
|
|||
When we speak of free software, we are referring to freedom, not |
|||
price. Our General Public Licenses are designed to make sure that you |
|||
have the freedom to distribute copies of free software (and charge for |
|||
this service if you wish), that you receive source code or can get it |
|||
if you want it, that you can change the software or use pieces of it |
|||
in new free programs; and that you know you can do these things. |
|||
|
|||
To protect your rights, we need to make restrictions that forbid |
|||
anyone to deny you these rights or to ask you to surrender the rights. |
|||
These restrictions translate to certain responsibilities for you if you |
|||
distribute copies of the software, or if you modify it. |
|||
|
|||
For example, if you distribute copies of such a program, whether |
|||
gratis or for a fee, you must give the recipients all the rights that |
|||
you have. You must make sure that they, too, receive or can get the |
|||
source code. And you must show them these terms so they know their |
|||
rights. |
|||
|
|||
We protect your rights with two steps: (1) copyright the software, and |
|||
(2) offer you this license which gives you legal permission to copy, |
|||
distribute and/or modify the software. |
|||
|
|||
Also, for each author's protection and ours, we want to make certain |
|||
that everyone understands that there is no warranty for this free |
|||
software. If the software is modified by someone else and passed on, we |
|||
want its recipients to know that what they have is not the original, so |
|||
that any problems introduced by others will not reflect on the original |
|||
authors' reputations. |
|||
|
|||
Finally, any free program is threatened constantly by software |
|||
patents. We wish to avoid the danger that redistributors of a free |
|||
program will individually obtain patent licenses, in effect making the |
|||
program proprietary. To prevent this, we have made it clear that any |
|||
patent must be licensed for everyone's free use or not licensed at all. |
|||
|
|||
The precise terms and conditions for copying, distribution and |
|||
modification follow. |
|||
|
|||
GNU GENERAL PUBLIC LICENSE |
|||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
|||
|
|||
0. This License applies to any program or other work which contains |
|||
a notice placed by the copyright holder saying it may be distributed |
|||
under the terms of this General Public License. The "Program", below, |
|||
refers to any such program or work, and a "work based on the Program" |
|||
means either the Program or any derivative work under copyright law: |
|||
that is to say, a work containing the Program or a portion of it, |
|||
either verbatim or with modifications and/or translated into another |
|||
language. (Hereinafter, translation is included without limitation in |
|||
the term "modification".) Each licensee is addressed as "you". |
|||
|
|||
Activities other than copying, distribution and modification are not |
|||
covered by this License; they are outside its scope. The act of |
|||
running the Program is not restricted, and the output from the Program |
|||
is covered only if its contents constitute a work based on the |
|||
Program (independent of having been made by running the Program). |
|||
Whether that is true depends on what the Program does. |
|||
|
|||
1. You may copy and distribute verbatim copies of the Program's |
|||
source code as you receive it, in any medium, provided that you |
|||
conspicuously and appropriately publish on each copy an appropriate |
|||
copyright notice and disclaimer of warranty; keep intact all the |
|||
notices that refer to this License and to the absence of any warranty; |
|||
and give any other recipients of the Program a copy of this License |
|||
along with the Program. |
|||
|
|||
You may charge a fee for the physical act of transferring a copy, and |
|||
you may at your option offer warranty protection in exchange for a fee. |
|||
|
|||
2. You may modify your copy or copies of the Program or any portion |
|||
of it, thus forming a work based on the Program, and copy and |
|||
distribute such modifications or work under the terms of Section 1 |
|||
above, provided that you also meet all of these conditions: |
|||
|
|||
a) You must cause the modified files to carry prominent notices |
|||
stating that you changed the files and the date of any change. |
|||
|
|||
b) You must cause any work that you distribute or publish, that in |
|||
whole or in part contains or is derived from the Program or any |
|||
part thereof, to be licensed as a whole at no charge to all third |
|||
parties under the terms of this License. |
|||
|
|||
c) If the modified program normally reads commands interactively |
|||
when run, you must cause it, when started running for such |
|||
interactive use in the most ordinary way, to print or display an |
|||
announcement including an appropriate copyright notice and a |
|||
notice that there is no warranty (or else, saying that you provide |
|||
a warranty) and that users may redistribute the program under |
|||
these conditions, and telling the user how to view a copy of this |
|||
License. (Exception: if the Program itself is interactive but |
|||
does not normally print such an announcement, your work based on |
|||
the Program is not required to print an announcement.) |
|||
|
|||
These requirements apply to the modified work as a whole. If |
|||
identifiable sections of that work are not derived from the Program, |
|||
and can be reasonably considered independent and separate works in |
|||
themselves, then this License, and its terms, do not apply to those |
|||
sections when you distribute them as separate works. But when you |
|||
distribute the same sections as part of a whole which is a work based |
|||
on the Program, the distribution of the whole must be on the terms of |
|||
this License, whose permissions for other licensees extend to the |
|||
entire whole, and thus to each and every part regardless of who wrote it. |
|||
|
|||
Thus, it is not the intent of this section to claim rights or contest |
|||
your rights to work written entirely by you; rather, the intent is to |
|||
exercise the right to control the distribution of derivative or |
|||
collective works based on the Program. |
|||
|
|||
In addition, mere aggregation of another work not based on the Program |
|||
with the Program (or with a work based on the Program) on a volume of |
|||
a storage or distribution medium does not bring the other work under |
|||
the scope of this License. |
|||
|
|||
3. You may copy and distribute the Program (or a work based on it, |
|||
under Section 2) in object code or executable form under the terms of |
|||
Sections 1 and 2 above provided that you also do one of the following: |
|||
|
|||
a) Accompany it with the complete corresponding machine-readable |
|||
source code, which must be distributed under the terms of Sections |
|||
1 and 2 above on a medium customarily used for software interchange; or, |
|||
|
|||
b) Accompany it with a written offer, valid for at least three |
|||
years, to give any third party, for a charge no more than your |
|||
cost of physically performing source distribution, a complete |
|||
machine-readable copy of the corresponding source code, to be |
|||
distributed under the terms of Sections 1 and 2 above on a medium |
|||
customarily used for software interchange; or, |
|||
|
|||
c) Accompany it with the information you received as to the offer |
|||
to distribute corresponding source code. (This alternative is |
|||
allowed only for noncommercial distribution and only if you |
|||
received the program in object code or executable form with such |
|||
an offer, in accord with Subsection b above.) |
|||
|
|||
The source code for a work means the preferred form of the work for |
|||
making modifications to it. For an executable work, complete source |
|||
code means all the source code for all modules it contains, plus any |
|||
associated interface definition files, plus the scripts used to |
|||
control compilation and installation of the executable. However, as a |
|||
special exception, the source code distributed need not include |
|||
anything that is normally distributed (in either source or binary |
|||
form) with the major components (compiler, kernel, and so on) of the |
|||
operating system on which the executable runs, unless that component |
|||
itself accompanies the executable. |
|||
|
|||
If distribution of executable or object code is made by offering |
|||
access to copy from a designated place, then offering equivalent |
|||
access to copy the source code from the same place counts as |
|||
distribution of the source code, even though third parties are not |
|||
compelled to copy the source along with the object code. |
|||
|
|||
4. You may not copy, modify, sublicense, or distribute the Program |
|||
except as expressly provided under this License. Any attempt |
|||
otherwise to copy, modify, sublicense or distribute the Program is |
|||
void, and will automatically terminate your rights under this License. |
|||
However, parties who have received copies, or rights, from you under |
|||
this License will not have their licenses terminated so long as such |
|||
parties remain in full compliance. |
|||
|
|||
5. You are not required to accept this License, since you have not |
|||
signed it. However, nothing else grants you permission to modify or |
|||
distribute the Program or its derivative works. These actions are |
|||
prohibited by law if you do not accept this License. Therefore, by |
|||
modifying or distributing the Program (or any work based on the |
|||
Program), you indicate your acceptance of this License to do so, and |
|||
all its terms and conditions for copying, distributing or modifying |
|||
the Program or works based on it. |
|||
|
|||
6. Each time you redistribute the Program (or any work based on the |
|||
Program), the recipient automatically receives a license from the |
|||
original licensor to copy, distribute or modify the Program subject to |
|||
these terms and conditions. You may not impose any further |
|||
restrictions on the recipients' exercise of the rights granted herein. |
|||
You are not responsible for enforcing compliance by third parties to |
|||
this License. |
|||
|
|||
7. If, as a consequence of a court judgment or allegation of patent |
|||
infringement or for any other reason (not limited to patent issues), |
|||
conditions are imposed on you (whether by court order, agreement or |
|||
otherwise) that contradict the conditions of this License, they do not |
|||
excuse you from the conditions of this License. If you cannot |
|||
distribute so as to satisfy simultaneously your obligations under this |
|||
License and any other pertinent obligations, then as a consequence you |
|||
may not distribute the Program at all. For example, if a patent |
|||
license would not permit royalty-free redistribution of the Program by |
|||
all those who receive copies directly or indirectly through you, then |
|||
the only way you could satisfy both it and this License would be to |
|||
refrain entirely from distribution of the Program. |
|||
|
|||
If any portion of this section is held invalid or unenforceable under |
|||
any particular circumstance, the balance of the section is intended to |
|||
apply and the section as a whole is intended to apply in other |
|||
circumstances. |
|||
|
|||
It is not the purpose of this section to induce you to infringe any |
|||
patents or other property right claims or to contest validity of any |
|||
such claims; this section has the sole purpose of protecting the |
|||
integrity of the free software distribution system, which is |
|||
implemented by public license practices. Many people have made |
|||
generous contributions to the wide range of software distributed |
|||
through that system in reliance on consistent application of that |
|||
system; it is up to the author/donor to decide if he or she is willing |
|||
to distribute software through any other system and a licensee cannot |
|||
impose that choice. |
|||
|
|||
This section is intended to make thoroughly clear what is believed to |
|||
be a consequence of the rest of this License. |
|||
|
|||
8. If the distribution and/or use of the Program is restricted in |
|||
certain countries either by patents or by copyrighted interfaces, the |
|||
original copyright holder who places the Program under this License |
|||
may add an explicit geographical distribution limitation excluding |
|||
those countries, so that distribution is permitted only in or among |
|||
countries not thus excluded. In such case, this License incorporates |
|||
the limitation as if written in the body of this License. |
|||
|
|||
9. The Free Software Foundation may publish revised and/or new versions |
|||
of the General Public License from time to time. Such new versions will |
|||
be similar in spirit to the present version, but may differ in detail to |
|||
address new problems or concerns. |
|||
|
|||
Each version is given a distinguishing version number. If the Program |
|||
specifies a version number of this License which applies to it and "any |
|||
later version", you have the option of following the terms and conditions |
|||
either of that version or of any later version published by the Free |
|||
Software Foundation. If the Program does not specify a version number of |
|||
this License, you may choose any version ever published by the Free Software |
|||
Foundation. |
|||
|
|||
10. If you wish to incorporate parts of the Program into other free |
|||
programs whose distribution conditions are different, write to the author |
|||
to ask for permission. For software which is copyrighted by the Free |
|||
Software Foundation, write to the Free Software Foundation; we sometimes |
|||
make exceptions for this. Our decision will be guided by the two goals |
|||
of preserving the free status of all derivatives of our free software and |
|||
of promoting the sharing and reuse of software generally. |
|||
|
|||
NO WARRANTY |
|||
|
|||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
|||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
|||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
|||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
|||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
|||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
|||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
|||
REPAIR OR CORRECTION. |
|||
|
|||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
|||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
|||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
|||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
|||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
|||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
|||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
|||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
|||
POSSIBILITY OF SUCH DAMAGES. |
|||
|
|||
END OF TERMS AND CONDITIONS |
|||
|
|||
How to Apply These Terms to Your New Programs |
|||
|
|||
If you develop a new program, and you want it to be of the greatest |
|||
possible use to the public, the best way to achieve this is to make it |
|||
free software which everyone can redistribute and change under these terms. |
|||
|
|||
To do so, attach the following notices to the program. It is safest |
|||
to attach them to the start of each source file to most effectively |
|||
convey the exclusion of warranty; and each file should have at least |
|||
the "copyright" line and a pointer to where the full notice is found. |
|||
|
|||
<one line to give the program's name and a brief idea of what it does.> |
|||
Copyright (C) <year> <name of author> |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 2 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
|
|||
|
|||
Also add information on how to contact you by electronic and paper mail. |
|||
|
|||
If the program is interactive, make it output a short notice like this |
|||
when it starts in an interactive mode: |
|||
|
|||
Gnomovision version 69, Copyright (C) year name of author |
|||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
|||
This is free software, and you are welcome to redistribute it |
|||
under certain conditions; type `show c' for details. |
|||
|
|||
The hypothetical commands `show w' and `show c' should show the appropriate |
|||
parts of the General Public License. Of course, the commands you use may |
|||
be called something other than `show w' and `show c'; they could even be |
|||
mouse-clicks or menu items--whatever suits your program. |
|||
|
|||
You should also get your employer (if you work as a programmer) or your |
|||
school, if any, to sign a "copyright disclaimer" for the program, if |
|||
necessary. Here is a sample; alter the names: |
|||
|
|||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
|||
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
|||
|
|||
<signature of Ty Coon>, 1 April 1989 |
|||
Ty Coon, President of Vice |
|||
|
|||
This General Public License does not permit incorporating your program into |
|||
proprietary programs. If your program is a subroutine library, you may |
|||
consider it more useful to permit linking proprietary applications with the |
|||
library. If this is what you want to do, use the GNU Library General |
|||
Public License instead of this License. |
|||
File diff suppressed because it is too large
@ -1,18 +0,0 @@ |
|||
# Makefile.am - master Makefile for libvlc-cil
|
|||
|
|||
ACLOCAL_AMFLAGS = -I m4 |
|||
AUTOMAKE_OPTIONS = \
|
|||
-Wall \
|
|||
check-news \
|
|||
std-options \
|
|||
dist-bzip2 \
|
|||
no-dist-gzip \
|
|||
no-exeext |
|||
|
|||
SUBDIRS = src tests |
|||
DIST_SUBDIRS = $(SUBDIRS) m4 |
|||
|
|||
doc: Doxyfile |
|||
$(DOXYGEN) |
|||
|
|||
.PHONY: doc |
|||
@ -1,4 +0,0 @@ |
|||
libvlc-cil 0.9.0 |
|||
================= |
|||
|
|||
Initial release. |
|||
@ -1,5 +0,0 @@ |
|||
libvlc-cil 0.9.0 |
|||
================= |
|||
|
|||
Common Intermediary Language bindings for LibVLC |
|||
|
|||
@ -1,38 +0,0 @@ |
|||
#!/bin/sh |
|||
# SVN package rebuild script |
|||
# $Id$ |
|||
# |
|||
# *********************************************************************** |
|||
# * Copyright © 2002-2005 Rémi Denis-Courmont. * |
|||
# * This program is free software; you can redistribute and/or modify * |
|||
# * it under the terms of the GNU General Public License as published * |
|||
# * by the Free Software Foundation; version 2 of the license. * |
|||
# * * |
|||
# * This program is distributed in the hope that it will be useful, * |
|||
# * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
# * See the GNU General Public License for more details. * |
|||
# * * |
|||
# * You should have received a copy of the GNU General Public License * |
|||
# * along with this program; if not, you can get it from: * |
|||
# * http://www.gnu.org/copyleft/gpl.html * |
|||
# *********************************************************************** |
|||
|
|||
set -xe |
|||
|
|||
cd "$(dirname "$0")" |
|||
|
|||
test -f src/exception.cs || { |
|||
echo "You must run this script from your cil directory.">&2 |
|||
exit 1 |
|||
} |
|||
|
|||
mkdir -p admin |
|||
autoreconf -sfi |
|||
|
|||
set +x |
|||
echo "" |
|||
echo "Type \`./configure' to configure the package for your system" |
|||
echo "(type \`./configure -- help' for help)." |
|||
echo "Then you can use the usual \`make', \`make install', etc." |
|||
|
|||
@ -1,40 +0,0 @@ |
|||
dnl configure.ac - Configure script for libvlc-cil |
|||
|
|||
dnl Process this file with GNU Autoconf to produce a configure script |
|||
|
|||
dnl *********************************************************************** |
|||
dnl * Copyright © 2007 Rémi Denis-Courmont. * |
|||
dnl * This program is free software; you can redistribute and/or modify * |
|||
dnl * it under the terms of the GNU General Public License as published * |
|||
dnl * by the Free Software Foundation; version 2 of the license, or (at * |
|||
dnl * your option) any later version. * |
|||
dnl * * |
|||
dnl * This program is distributed in the hope that it will be useful, * |
|||
dnl * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
dnl * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
dnl * See the GNU General Public License for more details. * |
|||
dnl * * |
|||
dnl * You should have received a copy of the GNU General Public License * |
|||
dnl * along with this program; if not, you can get it from: * |
|||
dnl * http://www.gnu.org/copyleft/gpl.html * |
|||
dnl *********************************************************************** |
|||
|
|||
AC_COPYRIGHT([Copyright (C) 2004-2009 Remi Denis-Courmont]) |
|||
AC_INIT(libvlc-cil, 1.0.0, vlc-devel_no_bulk_mail@videolan.org) |
|||
AC_PREREQ(2.50) |
|||
|
|||
AC_CONFIG_SRCDIR(configure.ac) |
|||
AC_CONFIG_AUX_DIR(admin) |
|||
AC_CONFIG_MACRO_DIR(m4) |
|||
|
|||
AC_ARG_VAR([CSC], [C sharp compiler command]) |
|||
AC_ARG_VAR([CSFLAGS], [C sharp compiler flags]) |
|||
AC_PATH_PROG([CSC], [gmcs csc], [false]) |
|||
|
|||
AC_ARG_VAR([DOXYGEN], [Doxygen command]) |
|||
AC_PATH_PROG([DOXYGEN], [doxygen], [false]) |
|||
|
|||
AM_INIT_AUTOMAKE |
|||
|
|||
AC_CONFIG_FILES([Makefile m4/Makefile src/Makefile tests/Makefile Doxyfile]) |
|||
AC_OUTPUT |
|||
@ -1 +0,0 @@ |
|||
VideoLAN.LibVLC.dll |
|||
@ -1,18 +0,0 @@ |
|||
EXTRA_DIST = $(SOURCES_dll) |
|||
MOSTLYCLEANFILES = $(pkglib_SCRIPTS) |
|||
|
|||
pkglib_SCRIPTS = VideoLAN.LibVLC.dll |
|||
|
|||
SOURCES_dll = \
|
|||
ustring.cs \
|
|||
exception.cs \
|
|||
event.cs \
|
|||
marshal.cs \
|
|||
instance.cs \
|
|||
media.cs \
|
|||
player.cs \
|
|||
libvlc.cs |
|||
|
|||
VideoLAN.LibVLC.dll: $(SOURCES_dll) |
|||
$(CSC) -target:library -out:$@ $(CSFLAGS) $^ |
|||
|
|||
@ -1,120 +0,0 @@ |
|||
/** |
|||
* @file event.cs |
|||
* @brief Unmanaged LibVLC events |
|||
* @ingroup Internals |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @ingroup Internals |
|||
* @{ |
|||
*/ |
|||
|
|||
/** |
|||
* @brief EventType: LibVLC event types |
|||
*/ |
|||
internal enum EventType |
|||
{ |
|||
MediaMetaChanged, |
|||
MediaSubItemAdded, |
|||
MediaDurationChanged, |
|||
MediaPreparsedChanged, |
|||
MediaFreed, |
|||
MediaStateChanged, |
|||
|
|||
PlayerNothingSpecial, |
|||
PlayerOpening, |
|||
PlayerBuffering, |
|||
PlayerPlaying, |
|||
PlayerPaused, |
|||
PlayerStopped, |
|||
PlayerForward, |
|||
PlayerBackward, |
|||
PlayerEndReached, |
|||
PlayerEncounteredError, |
|||
PlayerTimeChanged, |
|||
PlayerPositionChanged, |
|||
PlayerSeekableChanged, |
|||
PlayerPausableChanged, |
|||
|
|||
ListItemAdded, |
|||
ListWillAddItem, |
|||
ListItemDeleted, |
|||
ListWillDeleteItem, |
|||
|
|||
ListViewItemAdded, |
|||
ListViewWillAddItem, |
|||
ListViewItemDeleted, |
|||
ListViewWillDeleteItem, |
|||
|
|||
ListPlayerPlayed, |
|||
ListPlayerNextItemSet, |
|||
ListPlayerStopped, |
|||
|
|||
DiscovererStarted, |
|||
DiscovererEnded, |
|||
|
|||
PlayerTitleChanged, |
|||
}; |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal class GenericEvent |
|||
{ |
|||
public EventType type; |
|||
public IntPtr obj; |
|||
}; |
|||
internal delegate void GenericCallback (GenericEvent e, IntPtr d); |
|||
|
|||
/* Player events */ |
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class PlayerPositionEvent : GenericEvent |
|||
{ |
|||
float position; |
|||
}; |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class PlayerTimeEvent : GenericEvent |
|||
{ |
|||
long time; |
|||
}; |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class PlayerTitleEvent : GenericEvent |
|||
{ |
|||
int title; |
|||
}; |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class PlayerSeekableEvent : GenericEvent |
|||
{ |
|||
long seekable; |
|||
}; |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class PlayerPausableChangedEvent : GenericEvent |
|||
{ |
|||
long pausable; |
|||
}; |
|||
/** @} */ |
|||
}; |
|||
@ -1,149 +0,0 @@ |
|||
/** |
|||
* @file exception.cs |
|||
* @brief LibVLC exceptions |
|||
* @ingroup API |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007-2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief VLCException: base class for LibVLC exceptions |
|||
* @ingroup API |
|||
*/ |
|||
public class VLCException : Exception |
|||
{ |
|||
int code; |
|||
/** |
|||
* VLC exception code. |
|||
*/ |
|||
public int Code |
|||
{ |
|||
get |
|||
{ |
|||
return code; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Creates a managed VLC exception. |
|||
*/ |
|||
public VLCException () |
|||
{ |
|||
} |
|||
|
|||
/** |
|||
* Creates a managed VLC exception. |
|||
* @param message exception error message |
|||
*/ |
|||
public VLCException (string message) |
|||
: base (message) |
|||
{ |
|||
} |
|||
|
|||
/** |
|||
* Creates a managed VLC exception wrapping another exception. |
|||
* @param message exception error message |
|||
* @param inner inner wrapped exception |
|||
*/ |
|||
public VLCException (string message, Exception inner) |
|||
: base (message, inner) |
|||
{ |
|||
} |
|||
|
|||
/** |
|||
* Creates a VLC exception |
|||
* @param code VLC exception code |
|||
* @param message VLC exception message |
|||
*/ |
|||
public VLCException (int code, string message) : base (message) |
|||
{ |
|||
this.code = code; |
|||
} |
|||
|
|||
/** |
|||
* Creates a VLC exception |
|||
* @param code VLC exception code |
|||
*/ |
|||
public VLCException (int code) : base () |
|||
{ |
|||
this.code = code; |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief NativeException: CIL representation for libvlc_exception_t. |
|||
* @ingroup Internals |
|||
*/ |
|||
[StructLayout (LayoutKind.Sequential)] |
|||
public sealed class NativeException : IDisposable |
|||
{ |
|||
int raised; |
|||
int code; |
|||
IntPtr message; |
|||
|
|||
public NativeException () |
|||
{ |
|||
LibVLC.ExceptionInit (this); |
|||
} |
|||
|
|||
/** |
|||
* Throws a managed exception if LibVLC has returned a native |
|||
* unmanaged exception. Clears the native exception. |
|||
*/ |
|||
public void Raise () |
|||
{ |
|||
if (raised == 0) |
|||
return; |
|||
|
|||
string msg = U8String.FromNative (message); |
|||
try |
|||
{ |
|||
if (msg != null) |
|||
throw new VLCException (code, msg); |
|||
else |
|||
throw new VLCException (code); |
|||
} |
|||
finally |
|||
{ |
|||
LibVLC.ExceptionClear (this); |
|||
} |
|||
} |
|||
|
|||
/** IDisposable implementation. */ |
|||
public void Dispose () |
|||
{ |
|||
Dispose (true); |
|||
GC.SuppressFinalize (this); |
|||
} |
|||
|
|||
~NativeException () |
|||
{ |
|||
Dispose (false); |
|||
} |
|||
|
|||
private void Dispose (bool disposing) |
|||
{ |
|||
LibVLC.ExceptionClear (this); |
|||
} |
|||
}; |
|||
}; |
|||
@ -1,231 +0,0 @@ |
|||
/** |
|||
* @file instance.cs |
|||
* @brief LibVLC instance class |
|||
* @ingroup API |
|||
* |
|||
* @defgroup API Managed interface to LibVLC |
|||
* |
|||
* This is the primary class library for .NET applications |
|||
* to embed and control LibVLC. |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007-2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
/** |
|||
* @brief VideoLAN.LibVLC: VideoLAN project's LibVLC .Net bindings |
|||
* @ingroup API |
|||
* |
|||
* This namespace provides a set of managed APIs around the native LibVLC |
|||
* for the .Net Common Language Runtime. |
|||
*/ |
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief InstanceHandle: unmanaged LibVLC instance pointer |
|||
* @ingroup Internals |
|||
*/ |
|||
internal sealed class InstanceHandle : NonNullHandle |
|||
{ |
|||
/** |
|||
* NonNullHandle.Destroy |
|||
*/ |
|||
protected override void Destroy () |
|||
{ |
|||
LibVLC.Release (handle, null); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief VLC: VLC media player instance |
|||
* @ingroup API |
|||
* |
|||
* The VLC class provides represent a run-time instance of a media player. |
|||
* An instance can spawn multiple independent medias, however |
|||
* configuration settings, message logging, etc are common to all medias |
|||
* from the same instance. |
|||
*/ |
|||
public class VLC : BaseObject |
|||
{ |
|||
internal InstanceHandle Handle |
|||
{ |
|||
get |
|||
{ |
|||
return handle as InstanceHandle; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Loads the native LibVLC and creates a LibVLC instance. |
|||
* |
|||
* @param args VLC command line parameters for the LibVLC Instance. |
|||
*/ |
|||
public VLC (string[] args) |
|||
{ |
|||
U8String[] argv = new U8String[args.Length]; |
|||
for (int i = 0; i < args.Length; i++) |
|||
argv[i] = new U8String (args[i]); |
|||
|
|||
handle = LibVLC.Create (argv.Length, argv, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Starts a VLC interface plugin. |
|||
* |
|||
* @param name name of the interface plugin (e.g. "http", "qt4", ...) |
|||
*/ |
|||
public void AddInterface (string name) |
|||
{ |
|||
U8String uname = new U8String (name); |
|||
|
|||
LibVLC.AddIntf (Handle, uname, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Waits until VLC instance exits. This can happen if a fatal error |
|||
* occurs (e.g. cannot parse the arguments), if the user has quit |
|||
* through an interface, or if the special vlc://quit item was played.
|
|||
*/ |
|||
public void Run () |
|||
{ |
|||
LibVLC.Wait (Handle); |
|||
} |
|||
|
|||
/** |
|||
* The human-readable LibVLC version number. |
|||
*/ |
|||
public static string Version |
|||
{ |
|||
get |
|||
{ |
|||
return U8String.FromNative (LibVLC.GetVersion ()); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* The human-readable LibVLC C compiler infos. |
|||
*/ |
|||
public static string Compiler |
|||
{ |
|||
get |
|||
{ |
|||
return U8String.FromNative (LibVLC.GetCompiler ()); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* The unique commit identifier from the LibVLC source control system, |
|||
* or "exported" if unknown. |
|||
*/ |
|||
public static string ChangeSet |
|||
{ |
|||
get |
|||
{ |
|||
return U8String.FromNative (LibVLC.GetChangeset ()); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* The unmanaged VLC-internal instance object. |
|||
* Do not use this unless you really know what you are doing. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public IntPtr Object |
|||
{ |
|||
get |
|||
{ |
|||
return LibVLC.GetVLCInstance (Handle); |
|||
} |
|||
} |
|||
}; |
|||
}; |
|||
|
|||
/** |
|||
* @mainpage libvlc-cil documentation |
|||
* |
|||
* @section Introduction |
|||
* |
|||
* libvlc-cil is a thin API layer around LibVLC, |
|||
* the VideoLAN's project media framework C library. |
|||
* LibVLC comes built-in the VLC media player. |
|||
* |
|||
* With libvlc-cil, you can use LibVLC |
|||
* from within the .Net Common Language Runtime, |
|||
* with the CIL programming language of your preference. |
|||
* However, libvlc-cil and the code sample in this documentation |
|||
* are written is C#. |
|||
* |
|||
* @section Installation |
|||
* |
|||
* libvlc-cil does <b>not</b> include the underlying LibVLC by default. |
|||
* Make sure VLC, or at least LibVLC and the relevant VLC plugins are present. |
|||
* The LibVLC runtime library needs to be in the library search path for the |
|||
* Common Language Runtime. Check the documentation for your CLR for details. |
|||
* |
|||
* On Windows, libvlc.dll needs to be in the current directory, the DLL path |
|||
* of the running process, or the system search path (but the latter is |
|||
* uncommon and not supported by the official LibVLC installer). |
|||
* |
|||
* On Linux, libvlc.so should be in /usr/lib; if it is in another directory, |
|||
* such as /usr/local/lib, you might need to add that directory to the |
|||
* LD_LIBRARY_PATH environment variable. |
|||
* |
|||
* @section Usage |
|||
* |
|||
* First, you need to create a VLC instance. This will load and setup the |
|||
* native VLC runtime, the VLC configuration, the list of available plugins, |
|||
* the platform adaptation and the VLC log messages and objects subsystems |
|||
* @code |
|||
* using System; |
|||
* using VideoLAN.LibVLC; |
|||
* ... |
|||
* |
|||
* try { |
|||
* Console.WriteLine("Running on VLC version {0}", VLC.Version); |
|||
* } |
|||
* catch (Exception e) { |
|||
* Console.WriteLine("VLC is not available on your system."); |
|||
* throw e; |
|||
* } |
|||
* |
|||
* string[] args = new string[]{ "-v", "--ignore-config" }; |
|||
* VLC vlc = new VLC(args); |
|||
* @endcode |
|||
* @see VideoLAN::LibVLC::VLC |
|||
* |
|||
* To play media, you need a media and a player. |
|||
* @code |
|||
* Media media = new Media(vlc, "http://www.example.com/video.ogv"); |
|||
* Player player = new Player(media); |
|||
* player.Play(); |
|||
* @endcode |
|||
* @see VideoLAN::LibVLC::Media @see VideoLAN::LibVLC::Player |
|||
* |
|||
* All these objects use unmanaged resources. |
|||
* They all implement the IDisposeable interface. |
|||
* You should dispose them when you do not need them anymore: |
|||
* @code |
|||
* player.Dispose(); |
|||
* media.Dispose(); |
|||
* vlc.Dispose(); |
|||
* @endcode |
|||
*/ |
|||
@ -1,369 +0,0 @@ |
|||
/** |
|||
* @file libvlc.cs |
|||
* @brief Unmanaged LibVLC APIs |
|||
* @ingroup Internals |
|||
* |
|||
* @defgroup Internals LibVLC internals |
|||
* This covers internal marshalling functions to use the native LibVLC. |
|||
* Only VLC developers should need to read this section. |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007-2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief Native: unmanaged LibVLC APIs |
|||
* @ingroup Internals |
|||
*/ |
|||
internal enum MediaOptionFlag |
|||
{ |
|||
OptionTrusted = 0x2, |
|||
OptionUnique = 0x100, |
|||
}; |
|||
|
|||
internal static class LibVLC |
|||
{ |
|||
/* Where is the run-time? |
|||
* On ELF platforms, "libvlc.so.2" should be used instead. */ |
|||
const string lib = "libvlc.dll"; |
|||
|
|||
/* exception.c */ |
|||
[DllImport (lib, EntryPoint="libvlc_exception_init")] |
|||
public static extern void ExceptionInit (NativeException e); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_exception_clear")] |
|||
public static extern void ExceptionClear (NativeException e); |
|||
|
|||
/* core.c */ |
|||
[DllImport (lib, EntryPoint="libvlc_get_version")] |
|||
public static extern IntPtr GetVersion (); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_get_compiler")] |
|||
public static extern IntPtr GetCompiler (); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_get_changeset")] |
|||
public static extern IntPtr GetChangeset (); |
|||
|
|||
[DllImport (LibVLC.lib, EntryPoint="libvlc_free")] |
|||
public static extern void Free (IntPtr ptr); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_new")] |
|||
public static extern |
|||
InstanceHandle Create (int argc, U8String[] argv, NativeException ex); |
|||
|
|||
/*[DllImport (lib, EntryPoint="libvlc_retain")] |
|||
public static extern |
|||
void Retain (InstanceHandle h, NativeException ex);*/ |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_release")] |
|||
public static extern |
|||
void Release (IntPtr h, NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_add_intf")] |
|||
public static extern |
|||
void AddIntf (InstanceHandle h, U8String name, NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_wait")] |
|||
public static extern |
|||
void Wait (InstanceHandle h); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_get_vlc_instance")] |
|||
public static extern |
|||
IntPtr GetVLCInstance (InstanceHandle h); |
|||
|
|||
/* media.c */ |
|||
[DllImport (lib, EntryPoint="libvlc_media_new")] |
|||
public static extern |
|||
MediaHandle MediaCreate (InstanceHandle inst, U8String mrl, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_new_as_node")] |
|||
public static extern |
|||
MediaHandle MediaCreateAsNode (InstanceHandle inst, U8String name, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_add_option")] |
|||
public static extern |
|||
void MediaAddOption (MediaHandle media, U8String options, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_add_option_flag")] |
|||
public static extern |
|||
void MediaAddOptionWithFlag (MediaHandle media, U8String options, |
|||
MediaOptionFlag flag, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_release")] |
|||
public static extern |
|||
void MediaRelease (IntPtr ptr); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_get_mrl")] |
|||
public static extern |
|||
StringHandle MediaGetMRL (MediaHandle media, NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_duplicate")] |
|||
public static extern |
|||
MediaHandle MediaDuplicate (MediaHandle media); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_get_meta")] |
|||
public static extern |
|||
StringHandle MediaGetMeta (MediaHandle media, MetaType type, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_get_state")] |
|||
public static extern |
|||
State MediaGetState (MediaHandle media, NativeException ex); |
|||
|
|||
/*[DllImport (lib, EntryPoint="libvlc_media_subitems")] |
|||
public static extern |
|||
MediaListHandle MediaSubItems (MediaHandle media, NativeException ex);*/ |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_event_manager")] |
|||
public static extern |
|||
EventManagerHandle MediaEventManager (MediaHandle media, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_get_duration")] |
|||
public static extern |
|||
long MediaGetDuration (MediaHandle media, NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_is_preparsed")] |
|||
public static extern |
|||
int MediaIsPreparsed (MediaHandle media, NativeException ex); |
|||
|
|||
/*[DllImport (lib, EntryPoint="libvlc_media_set_user_data")] |
|||
public static extern |
|||
void MediaIsPreparsed (MediaHandle media, IntPtr data, |
|||
NativeException ex);*/ |
|||
|
|||
/*[DllImport (lib, EntryPoint="libvlc_media_get_user_data")] |
|||
public static extern |
|||
IntPtr MediaIsPreparsed (MediaHandle media, NativeException ex);*/ |
|||
|
|||
/* media_player.c */ |
|||
[DllImport (lib, EntryPoint="libvlc_media_player_new")] |
|||
public static extern |
|||
PlayerHandle PlayerCreate (InstanceHandle inst, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_new_from_media")] |
|||
public static extern |
|||
PlayerHandle PlayerCreateFromMedia (MediaHandle media, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_player_release")] |
|||
public static extern |
|||
void PlayerRelease (IntPtr ptr); |
|||
|
|||
/* PlayerRetain */ |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_media")] |
|||
public static extern |
|||
void PlayerSetMedia (PlayerHandle player, MediaHandle media, |
|||
NativeException ex); |
|||
|
|||
/*[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_media")] |
|||
public static extern |
|||
MediaHandle PlayerGetMedia (PlayerHandle player, |
|||
NativeException ex);*/ |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_event_manager")] |
|||
public static extern |
|||
EventManagerHandle PlayerEventManager (PlayerHandle media, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_is_playing")] |
|||
public static extern |
|||
int PlayerIsPlaying (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_play")] |
|||
public static extern |
|||
void PlayerPlay (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_pause")] |
|||
public static extern |
|||
void PlayerPause (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_stop")] |
|||
public static extern |
|||
void PlayerStop (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_xwindow")] |
|||
public static extern |
|||
void PlayerSetXWindow (PlayerHandle player, int xid, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_xwindow")] |
|||
public static extern |
|||
int PlayerGetXWindow (PlayerHandle player); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_hwnd")] |
|||
public static extern |
|||
void PlayerSetHWND (PlayerHandle player, SafeHandle hwnd, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_hwnd")] |
|||
public static extern |
|||
SafeHandle PlayerGetHWND (PlayerHandle player); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_length")] |
|||
public static extern |
|||
long PlayerGetLength (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_player_get_time")] |
|||
public static extern |
|||
long PlayerGetTime (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_media_player_set_time")] |
|||
public static extern |
|||
void PlayerSetTime (PlayerHandle player, long time, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_position")] |
|||
public static extern |
|||
float PlayerGetPosition (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_position")] |
|||
public static extern |
|||
void PlayerSetPosition (PlayerHandle player, float position, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_chapter")] |
|||
public static extern |
|||
int PlayerGetChapter (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_chapter")] |
|||
public static extern |
|||
void PlayerSetChapter (PlayerHandle player, int chapter, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_chapter_count")] |
|||
public static extern |
|||
int PlayerGetChapterCount (PlayerHandle player, NativeException ex); |
|||
|
|||
/* PlayerWillPlay */ |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_chapter_count_for_title")] |
|||
public static extern |
|||
int PlayerGetChapterCountForTitle (PlayerHandle player, int title, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_title")] |
|||
public static extern |
|||
int PlayerGetTitle (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_title")] |
|||
public static extern |
|||
void PlayerSetTitle (PlayerHandle player, int chapter, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_title_count")] |
|||
public static extern |
|||
int PlayerGetTitleCount (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_next_chapter")] |
|||
public static extern |
|||
void PlayerNextChapter (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_previous_chapter")] |
|||
public static extern |
|||
void PlayerPreviousChapter (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_rate")] |
|||
public static extern |
|||
float PlayerGetRate (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_set_rate")] |
|||
public static extern |
|||
void PlayerSetRate (PlayerHandle player, float rate, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_state")] |
|||
public static extern |
|||
State PlayerGetState (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_get_fps")] |
|||
public static extern |
|||
float PlayerGetFPS (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_has_vout")] |
|||
public static extern |
|||
int PlayerHasVout (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_is_seekable")] |
|||
public static extern |
|||
int PlayerIsSeekable (PlayerHandle player, NativeException ex); |
|||
|
|||
[DllImport (lib, |
|||
EntryPoint="libvlc_media_player_can_pause")] |
|||
public static extern |
|||
int PlayerCanPause (PlayerHandle player, NativeException ex); |
|||
|
|||
|
|||
/* TODO: video, audio */ |
|||
|
|||
/* event.c */ |
|||
[DllImport (lib, EntryPoint="libvlc_event_attach")] |
|||
public static extern |
|||
void EventAttach (EventManagerHandle manager, EventType type, |
|||
IntPtr callback, IntPtr user_data, |
|||
NativeException ex); |
|||
|
|||
[DllImport (lib, EntryPoint="libvlc_event_detach")] |
|||
public static extern |
|||
void EventDetach (EventManagerHandle manager, EventType type, |
|||
IntPtr callback, IntPtr user_data, |
|||
NativeException ex); |
|||
|
|||
/* libvlc_event_type_name */ |
|||
}; |
|||
}; |
|||
@ -1,221 +0,0 @@ |
|||
/** |
|||
* @file marshal.cs |
|||
* @brief Common LibVLC objects marshalling utilities |
|||
* @ingroup Internals |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007-2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief NonNullHandle: abstract safe handle class for non-NULL pointers |
|||
* @ingroup Internals |
|||
* Microsoft.* namespace has a similar class. However we want to use the |
|||
* System.* namespace only. |
|||
*/ |
|||
internal abstract class NonNullHandle : SafeHandle |
|||
{ |
|||
protected NonNullHandle () |
|||
: base (IntPtr.Zero, true) |
|||
{ |
|||
} |
|||
|
|||
/** |
|||
* System.Runtime.InteropServices.SafeHandle::IsInvalid. |
|||
*/ |
|||
public override bool IsInvalid |
|||
{ |
|||
get |
|||
{ |
|||
return handle == IntPtr.Zero; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Destroys an handle. Cannot fail. |
|||
*/ |
|||
protected abstract void Destroy (); |
|||
|
|||
/** |
|||
* System.Runtime.InteropServices.SafeHandle::ReleaseHandle. |
|||
*/ |
|||
protected override bool ReleaseHandle () |
|||
{ |
|||
Destroy (); |
|||
return true; |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief BaseObject: generic wrapper around a safe LibVLC handle. |
|||
* @ingroup Internals |
|||
* |
|||
* This is the baseline for all managed LibVLC objects. It wraps: |
|||
* - an unmanaged LibVLC pointer, |
|||
* - a native exception structure. |
|||
*/ |
|||
public class BaseObject : IDisposable |
|||
{ |
|||
internal NativeException ex; /**< buffer for LibVLC exceptions */ |
|||
internal SafeHandle handle; /**< wrapped safe handle */ |
|||
|
|||
internal BaseObject () |
|||
{ |
|||
ex = new NativeException (); |
|||
this.handle = null; |
|||
} |
|||
|
|||
/** |
|||
* Checks if the LibVLC run-time raised an exception |
|||
* If so, raises a CIL exception. |
|||
*/ |
|||
internal void Raise () |
|||
{ |
|||
ex.Raise (); |
|||
} |
|||
|
|||
/** |
|||
* IDisposable::Dispose. |
|||
*/ |
|||
public void Dispose () |
|||
{ |
|||
Dispose (true); |
|||
GC.SuppressFinalize (this); |
|||
} |
|||
|
|||
/** |
|||
* Releases unmanaged resources associated with the object. |
|||
* @param disposing true if the disposing the object explicitly, |
|||
* false if finalizing the object inside the GC. |
|||
*/ |
|||
protected virtual void Dispose (bool disposing) |
|||
{ |
|||
if (disposing) |
|||
{ |
|||
ex.Dispose (); |
|||
if (handle != null) |
|||
handle.Close (); |
|||
} |
|||
ex = null; |
|||
handle = null; |
|||
} |
|||
}; |
|||
|
|||
internal class EventManagerHandle : NonNullHandle |
|||
{ |
|||
protected override void Destroy () |
|||
{ |
|||
} |
|||
}; |
|||
|
|||
|
|||
/** |
|||
* @brief EventingObject: wrapper around an eventing LibVLC handle. |
|||
* @ingroup Internals |
|||
* |
|||
* This is the base class for all managed LibVLC objects which do have an |
|||
* event manager. |
|||
*/ |
|||
public abstract class EventingObject : BaseObject |
|||
{ |
|||
private Dictionary<Delegate, IntPtr> events; |
|||
/**< references to our unmanaged function pointers */ |
|||
|
|||
internal EventingObject () : base () |
|||
{ |
|||
events = new Dictionary<Delegate, IntPtr> (); |
|||
} |
|||
|
|||
/** |
|||
* Releases unmanaged resources associated with the object. |
|||
* @param disposing true if the disposing the object explicitly, |
|||
* false if finalizing the object inside the GC. |
|||
*/ |
|||
protected override void Dispose (bool disposing) |
|||
{ |
|||
events = null; |
|||
base.Dispose (disposing); |
|||
} |
|||
|
|||
/** |
|||
* @return the unmanaged event manager for this object |
|||
*/ |
|||
internal abstract EventManagerHandle GetManager (); |
|||
|
|||
/** |
|||
* Registers an event handler. |
|||
* @param type event type to register to |
|||
* @param callback callback to invoke when the event occurs |
|||
* |
|||
* @note |
|||
* For simplicity, we require distinct callbacks for each event type. |
|||
* This is hardly an issue since most events have different formats. |
|||
*/ |
|||
internal void Attach (EventType type, Delegate callback) |
|||
{ |
|||
EventManagerHandle manager; |
|||
IntPtr cb = Marshal.GetFunctionPointerForDelegate (callback); |
|||
bool unref = false; |
|||
|
|||
/* If things go wrong, we will leak the callback thunk... until |
|||
* this object is destroyed anyway. If we added the thunk _after_ |
|||
* the critical section, the native code could try to jump to a |
|||
* non-existent address, which is much worse. */ |
|||
events.Add (callback, cb); |
|||
try |
|||
{ |
|||
handle.DangerousAddRef (ref unref); |
|||
manager = GetManager (); |
|||
LibVLC.EventAttach (manager, type, cb, IntPtr.Zero, ex); |
|||
} |
|||
finally |
|||
{ |
|||
if (unref) |
|||
handle.DangerousRelease (); |
|||
} |
|||
Raise (); |
|||
} |
|||
|
|||
internal void Detach (EventType type, Delegate callback) |
|||
{ |
|||
EventManagerHandle manager; |
|||
IntPtr cb = events[callback]; |
|||
bool unref = false; |
|||
|
|||
try |
|||
{ |
|||
handle.DangerousAddRef (ref unref); |
|||
manager = GetManager (); |
|||
LibVLC.EventDetach (manager, type, cb, IntPtr.Zero, ex); |
|||
} |
|||
finally |
|||
{ |
|||
if (unref) |
|||
handle.DangerousRelease (); |
|||
} |
|||
Raise (); |
|||
events.Remove (callback); |
|||
} |
|||
}; |
|||
}; |
|||
@ -1,319 +0,0 @@ |
|||
/** |
|||
* @file media.cs |
|||
* @brief Media descriptor class |
|||
* @ingroup API |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007-2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
//using System.Collections.Generic;
|
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief MediaHandle: unmanaged LibVLC media pointer |
|||
* @ingroup Internals |
|||
*/ |
|||
internal sealed class MediaHandle : NonNullHandle |
|||
{ |
|||
/** |
|||
* NonNullHandle.Destroy |
|||
*/ |
|||
protected override void Destroy () |
|||
{ |
|||
LibVLC.MediaRelease (handle); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief MetaType: type of a media meta-information entry |
|||
*/ |
|||
public enum MetaType |
|||
{ |
|||
Title, |
|||
Artist, |
|||
Genre, |
|||
Copyright, |
|||
Album, |
|||
TrackNumber, |
|||
Description, |
|||
Rating, |
|||
Date, |
|||
Setting, |
|||
URL, |
|||
Language, |
|||
NowPlaying, |
|||
Publisher, |
|||
EncodedBy, |
|||
ArtworkURL, |
|||
TrackID, |
|||
}; |
|||
|
|||
/** |
|||
* @brief State: media/player state |
|||
* |
|||
* Media and Player objects are always in one of these state. |
|||
* @see Media::State and @see Player::State. |
|||
*/ |
|||
public enum State |
|||
{ |
|||
NothingSpecial, /**< Nothing going on */ |
|||
Opening, /**< Being opened */ |
|||
Buffering, /**< Buffering before play */ |
|||
Playing, /**< Playing */ |
|||
Paused, /**< Paused */ |
|||
Stopped, /**< Stopped */ |
|||
Ended, /**< Played until the end */ |
|||
Error, /**< Failed */ |
|||
}; |
|||
|
|||
/* Media events */ |
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class MediaMetaEvent : GenericEvent |
|||
{ |
|||
public MetaType metaType; |
|||
}; |
|||
internal delegate void MediaMetaCallback (MediaMetaEvent e, IntPtr d); |
|||
|
|||
/*[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class MediaSubitemEvent : GenericEvent |
|||
{ |
|||
public IntPtr child; -- MediaHandle |
|||
};*/ |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class MediaDurationEvent : GenericEvent |
|||
{ |
|||
public long duration; |
|||
}; |
|||
internal delegate void MediaDurationCallback (MediaDurationEvent e, |
|||
IntPtr d); |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class MediaPreparseEvent : GenericEvent |
|||
{ |
|||
public int status; |
|||
}; |
|||
internal delegate void MediaPreparseCallback (MediaPreparseEvent e, |
|||
IntPtr d); |
|||
|
|||
/* media_freed -> bad idea w.r.t. the GC */ |
|||
|
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal sealed class MediaStateEvent : GenericEvent |
|||
{ |
|||
public State state; |
|||
}; |
|||
internal delegate void MediaStateCallback (MediaStateEvent e, IntPtr d); |
|||
|
|||
/** |
|||
* @brief Media: a source media |
|||
* @ingroup API |
|||
* Each media object represents an input media, such as a file or an URL. |
|||
*/ |
|||
public class Media : EventingObject, ICloneable |
|||
{ |
|||
internal MediaHandle Handle |
|||
{ |
|||
get |
|||
{ |
|||
return handle as MediaHandle; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Creates a Media object. |
|||
* |
|||
* @param instance VLC instance |
|||
* @param mrl Media Resource Locator (file path or URL) |
|||
*/ |
|||
public Media (VLC instance, string mrl) |
|||
{ |
|||
U8String umrl = new U8String (mrl); |
|||
|
|||
handle = LibVLC.MediaCreate (instance.Handle, umrl, ex); |
|||
Raise (); |
|||
Attach (); |
|||
} |
|||
|
|||
private Media (MediaHandle handle) |
|||
{ |
|||
this.handle = handle; |
|||
Attach (); |
|||
} |
|||
|
|||
/** |
|||
* Duplicates a media object. |
|||
*/ |
|||
public object Clone () |
|||
{ |
|||
return new Media (LibVLC.MediaDuplicate (Handle)); |
|||
} |
|||
|
|||
private void Attach () |
|||
{ |
|||
Attach (EventType.MediaMetaChanged, |
|||
new MediaMetaCallback (MetaCallback)); |
|||
//Attach (EventType.MediaSubItemAdded, SubItemAdded);
|
|||
Attach (EventType.MediaDurationChanged, |
|||
new MediaDurationCallback (DurationCallback)); |
|||
/*Attach (EventType.MediaPreparsedChanged, |
|||
new MediaPreparseCallback (PreparseCallback));*/ |
|||
/* MediaFreed: better not... */ |
|||
Attach (EventType.MediaStateChanged, |
|||
new MediaStateCallback (StateCallback)); |
|||
} |
|||
|
|||
/** |
|||
* Add VLC input item options to the media. |
|||
* @code |
|||
* Media m = new Media(vlc, "http://www.example.com/music.ogg"); |
|||
* m.AddOptions(":http-user-agent=LibVLC.Net " |
|||
* + ":http-proxy=proxy:8080", true); |
|||
* @endcode |
|||
* @param options VLC options in VLC input item format |
|||
* (see example below) |
|||
* @param trusted whether the options are set by a trusted agent |
|||
* (e.g. the local computer configuration) or not |
|||
* (e.g. a downloaded file). |
|||
* @version VLC 0.9.9 if trusted is false |
|||
*/ |
|||
public void AddOptions (string options, bool trusted) |
|||
{ |
|||
U8String uopts = new U8String (options); |
|||
|
|||
if (trusted) |
|||
LibVLC.MediaAddOption (Handle, uopts, ex); |
|||
else |
|||
LibVLC.MediaAddUntrustedOption (Handle, uopts, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* The media location (file path, URL, ...). |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public string Location |
|||
{ |
|||
get |
|||
{ |
|||
StringHandle str = LibVLC.MediaGetMRL (Handle, ex); |
|||
Raise (); |
|||
return str.Transform (); |
|||
} |
|||
} |
|||
|
|||
public override string ToString () |
|||
{ |
|||
return Location; |
|||
} |
|||
|
|||
/** |
|||
* @param type meta data type |
|||
* @return the meta data value, or @a null if unknown |
|||
*/ |
|||
public string GetMeta (MetaType type) |
|||
{ |
|||
StringHandle str = LibVLC.MediaGetMeta (Handle, type, ex); |
|||
Raise (); |
|||
return str.Transform (); |
|||
} |
|||
|
|||
public delegate void MetaChange (Media media, MetaType type); |
|||
public event MetaChange MetaChanged; |
|||
private void MetaCallback (MediaMetaEvent ev, IntPtr data) |
|||
{ |
|||
if (MetaChanged != null) |
|||
MetaChanged (this, ev.metaType); |
|||
} |
|||
|
|||
/** |
|||
* Current state of the media. |
|||
*/ |
|||
public State State |
|||
{ |
|||
get |
|||
{ |
|||
State ret = LibVLC.MediaGetState (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
} |
|||
|
|||
public delegate void StateChange (Media media, State state); |
|||
public event StateChange StateChanged; |
|||
private void StateCallback (MediaStateEvent ev, IntPtr data) |
|||
{ |
|||
if (StateChanged != null) |
|||
StateChanged (this, ev.state); |
|||
} |
|||
|
|||
internal override EventManagerHandle GetManager () |
|||
{ |
|||
return LibVLC.MediaEventManager (Handle, null); |
|||
} |
|||
|
|||
/** |
|||
* Duration of the media in microseconds. The precision of the result |
|||
* depends on the input stram protocol and file format. The value |
|||
* might be incorrect and unknown (VLC usually returns 0 or -1 then). |
|||
*/ |
|||
public long Duration |
|||
{ |
|||
get |
|||
{ |
|||
long duration = LibVLC.MediaGetDuration (Handle, ex); |
|||
Raise (); |
|||
return duration; |
|||
} |
|||
} |
|||
|
|||
public delegate void DurationChange (Media media, long duration); |
|||
public event DurationChange DurationChanged; |
|||
private void DurationCallback (MediaDurationEvent ev, IntPtr data) |
|||
{ |
|||
if (DurationChanged != null) |
|||
DurationChanged (this, ev.duration); |
|||
} |
|||
|
|||
/** |
|||
* Whether the media was "preparsed". If true, the meta-infos were |
|||
* extracted, even before the media was played. This is normally only |
|||
* available if the input files is stored on a local filesystem. |
|||
*/ |
|||
public bool IsPreparsed |
|||
{ |
|||
get |
|||
{ |
|||
int preparsed = LibVLC.MediaIsPreparsed (Handle, ex); |
|||
Raise (); |
|||
return preparsed != 0; |
|||
} |
|||
} |
|||
|
|||
public delegate void PreparseChange (Media media, bool preparsed); |
|||
public event PreparseChange PreparseChanged; |
|||
private void PreparseCallback (MediaPreparseEvent ev, IntPtr data) |
|||
{ |
|||
if (PreparseChanged != null) |
|||
PreparseChanged (this, ev.status != 0); |
|||
} |
|||
}; |
|||
}; |
|||
@ -1,446 +0,0 @@ |
|||
/** |
|||
* @file player.cs |
|||
* @brief Media player class |
|||
* @ingroup API |
|||
* |
|||
* @defgroup API Managed interface to LibVLC |
|||
* This is the primary class library for .NET applications |
|||
* to embed and control LibVLC. |
|||
* |
|||
* @defgroup Internals LibVLC internals |
|||
* This covers internal marshalling functions to use the native LibVLC. |
|||
* Only VLC developers should need to read this section. |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2009 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief PlayerHandle: unmanaged LibVLC media player pointer |
|||
* @ingroup Internals |
|||
*/ |
|||
internal sealed class PlayerHandle : NonNullHandle |
|||
{ |
|||
protected override void Destroy () |
|||
{ |
|||
LibVLC.PlayerRelease (handle); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief MediaPlayer: a simple media player |
|||
* @ingroup API |
|||
* Use this class to play a media. |
|||
*/ |
|||
public class Player : EventingObject |
|||
{ |
|||
internal PlayerHandle Handle |
|||
{ |
|||
get |
|||
{ |
|||
return handle as PlayerHandle; |
|||
} |
|||
} |
|||
|
|||
Media media; /**< Active media */ |
|||
/** |
|||
* The Media object that the MediaPlayer is using, |
|||
* or null if there is none. |
|||
*/ |
|||
public Media Media |
|||
{ |
|||
get |
|||
{ |
|||
return media; |
|||
} |
|||
set |
|||
{ |
|||
MediaHandle mh = (value != null) ? value.Handle : null; |
|||
|
|||
LibVLC.PlayerSetMedia (Handle, mh, null); |
|||
media = value; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Creates a player with no medias. |
|||
* An input media will be needed before this media player can be used. |
|||
* |
|||
* @param instance VLC instance |
|||
*/ |
|||
public Player (VLC instance) |
|||
{ |
|||
this.media = null; |
|||
handle = LibVLC.PlayerCreate (instance.Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Creates a player object for a given a media. |
|||
* |
|||
* @param media media object |
|||
*/ |
|||
public Player (Media media) |
|||
{ |
|||
this.media = media; |
|||
handle = LibVLC.PlayerCreateFromMedia (media.Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
internal override EventManagerHandle GetManager () |
|||
{ |
|||
return LibVLC.PlayerEventManager (Handle, null); |
|||
} |
|||
|
|||
/** |
|||
* Whether the player is currently active. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public bool IsPlaying |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerIsPlaying (Handle, ex); |
|||
Raise (); |
|||
return ret != 0; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Starts playing the selected media. |
|||
*/ |
|||
public void Play () |
|||
{ |
|||
LibVLC.PlayerPlay (Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Pauses the playback. |
|||
*/ |
|||
public void Pause () |
|||
{ |
|||
LibVLC.PlayerPause (Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Stops the playback. |
|||
*/ |
|||
public void Stop () |
|||
{ |
|||
LibVLC.PlayerStop (Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* The 32-bits identifier of an X Window System window, |
|||
* or 0 if not specified. |
|||
* Video will be rendered inside that window, if the underlying VLC |
|||
* supports X11. Note that X pixmaps are <b>not</b> supported. |
|||
* Also note that you should set/change/unset the window while |
|||
* playback is not started or stopped; live reparenting might not |
|||
* work. |
|||
* |
|||
* @warning If the identifier is invalid, Xlib might abort the process. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public int XWindow |
|||
{ |
|||
get |
|||
{ |
|||
return LibVLC.PlayerGetXWindow (Handle); |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetXWindow (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* The handle of a window (HWND) from the Win32 API, |
|||
* or NULL if unspecified. |
|||
* Video will be rendered inside that window, if the underlying VLC |
|||
* supports one of DirectDraw, Direct3D, GDI or OpenGL/Win32. |
|||
* Note that you should set/change/unset the window while playback is |
|||
* not started or stopped; live reparenting might not work. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public SafeHandle HWND |
|||
{ |
|||
get |
|||
{ |
|||
return LibVLC.PlayerGetHWND (Handle); |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetHWND (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Total length in milliseconds of the playback (if known). |
|||
*/ |
|||
public long Length |
|||
{ |
|||
get |
|||
{ |
|||
long ret = LibVLC.PlayerGetLength (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Playback position in milliseconds from the start (if applicable). |
|||
* Setting this value might not work depending on the underlying |
|||
* media capability and file format. |
|||
* |
|||
* Changing the Time will also change the Position. |
|||
*/ |
|||
public long Time |
|||
{ |
|||
get |
|||
{ |
|||
long ret = LibVLC.PlayerGetTime (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetTime (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Playback position as a fraction of the total (if applicable). |
|||
* At start, this is 0; at the end, this is 1. |
|||
* Setting this value might not work depending on the underlying |
|||
* media capability and file format. |
|||
* |
|||
* Changing the Position will also change the Time. |
|||
*/ |
|||
public float Position |
|||
{ |
|||
get |
|||
{ |
|||
float ret = LibVLC.PlayerGetPosition (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetPosition (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Number of the current chapter (within the current title). |
|||
* This is mostly used for DVDs and the likes. |
|||
*/ |
|||
public int Chapter |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerGetChapter (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetChapter (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Number of chapters within the current title, |
|||
*/ |
|||
public int ChapterCount |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerGetChapterCount (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Gets the number of chapters within a given title. |
|||
* @param title media title number |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public int GetChapterCountByTitle (int title) |
|||
{ |
|||
int ret = LibVLC.PlayerGetChapterCountForTitle (Handle, title, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
|
|||
/** |
|||
* Number of the current title. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public int Title |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerGetTitle (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetTitle (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Total number of titles. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public int TitleCount |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerGetTitleCount (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Skips to the beginning of the next chapter. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public void NextChapter () |
|||
{ |
|||
LibVLC.PlayerNextChapter (Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Rewinds to the previous chapter. |
|||
* @version VLC 1.0 |
|||
*/ |
|||
public void PreviousChapter () |
|||
{ |
|||
LibVLC.PlayerPreviousChapter (Handle, ex); |
|||
Raise (); |
|||
} |
|||
|
|||
/** |
|||
* Media playback rate. |
|||
* 1.0 is the nominal rate. |
|||
* Less than one is slower than nominal. |
|||
* More than one is faster than nominal. |
|||
*/ |
|||
public float Rate |
|||
{ |
|||
get |
|||
{ |
|||
float ret = LibVLC.PlayerGetRate (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
set |
|||
{ |
|||
LibVLC.PlayerSetRate (Handle, value, ex); |
|||
Raise (); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Current state of the player. |
|||
*/ |
|||
public State State |
|||
{ |
|||
get |
|||
{ |
|||
State ret = LibVLC.PlayerGetState (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Frame rate in unit/seconds. |
|||
*/ |
|||
public float FramePerSeconds |
|||
{ |
|||
get |
|||
{ |
|||
float ret = LibVLC.PlayerGetFPS (Handle, ex); |
|||
Raise (); |
|||
return ret; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Whether a video track is currently active. |
|||
* This is false if there is no video track, or if video is discarded. |
|||
*/ |
|||
public bool HasVideo |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerHasVout (Handle, ex); |
|||
Raise (); |
|||
return ret != 0; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Whether the media supports seeking. |
|||
* Note that this tells nothing about the seeking precision. |
|||
*/ |
|||
public bool CanSeek |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerIsSeekable (Handle, ex); |
|||
Raise (); |
|||
return ret != 0; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Whether the media supports pausing. |
|||
* Live content cannot be paused, unless timeshifting is enabled. |
|||
*/ |
|||
public bool CanPause |
|||
{ |
|||
get |
|||
{ |
|||
int ret = LibVLC.PlayerCanPause (Handle, ex); |
|||
Raise (); |
|||
return ret != 0; |
|||
} |
|||
} |
|||
}; |
|||
}; |
|||
@ -1,137 +0,0 @@ |
|||
/** |
|||
* @file ustring.cs |
|||
* @brief Managed LibVLC strings |
|||
* @ingroup Internals |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using System.Runtime.InteropServices; |
|||
|
|||
namespace VideoLAN.LibVLC |
|||
{ |
|||
/** |
|||
* @brief U8String: Native UTF-8 characters array |
|||
* @ingroup Internals |
|||
* This supports conversion between native UTF-8 nul-terminated characters |
|||
* arrays (as used by the native LibVLC) and managed strings. |
|||
*/ |
|||
[StructLayout (LayoutKind.Sequential)] |
|||
internal struct U8String |
|||
{ |
|||
public byte[] mb_str; /**< nul-terminated UTF-8 bytes array */ |
|||
|
|||
/** |
|||
* Creates an UTF-8 characters array from a .NET string. |
|||
* @param value string to convert |
|||
*/ |
|||
public U8String (string value) |
|||
{ |
|||
mb_str = null; |
|||
if (value == null) |
|||
return; |
|||
|
|||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes (value); |
|||
mb_str = new byte[bytes.Length + 1]; |
|||
Array.Copy (bytes, mb_str, bytes.Length); |
|||
mb_str[bytes.Length] = 0; |
|||
} |
|||
|
|||
private U8String (IntPtr ptr) |
|||
{ |
|||
mb_str = null; |
|||
if (ptr == IntPtr.Zero) |
|||
return; |
|||
|
|||
int i = 0; |
|||
while (Marshal.ReadByte (ptr, i) != 0) |
|||
i++; |
|||
i++; |
|||
|
|||
mb_str = new byte[i]; |
|||
Marshal.Copy (ptr, mb_str, 0, i); |
|||
} |
|||
|
|||
/** |
|||
* Object::ToString. |
|||
*/ |
|||
public override string ToString () |
|||
{ |
|||
if (mb_str == null) |
|||
return null; |
|||
|
|||
byte[] bytes = new byte[mb_str.Length - 1]; |
|||
Array.Copy (mb_str, bytes, bytes.Length); |
|||
|
|||
return System.Text.Encoding.UTF8.GetString (bytes); |
|||
} |
|||
|
|||
/** |
|||
* Converts a pointer to a nul-terminated UTF-8 characters array into |
|||
* a managed string. |
|||
*/ |
|||
public static string FromNative (IntPtr ptr) |
|||
{ |
|||
return new U8String (ptr).ToString (); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief MemoryHandle: heap allocation by the C run-time |
|||
* @ingroup Internals |
|||
*/ |
|||
internal class MemoryHandle : NonNullHandle |
|||
{ |
|||
/** |
|||
* NonNullHandle.Destroy |
|||
*/ |
|||
protected override void Destroy () |
|||
{ |
|||
LibVLC.Free (handle); |
|||
} |
|||
}; |
|||
|
|||
/** |
|||
* @brief StringHandle: heap-allocated characters array |
|||
* @ingroup Internals |
|||
*/ |
|||
internal sealed class StringHandle : MemoryHandle |
|||
{ |
|||
/** |
|||
* Converts an heap-allocated nul-terminated UTF-8 characters array |
|||
* into a managed string. |
|||
* @return the resulting managed string. |
|||
*/ |
|||
public override string ToString () |
|||
{ |
|||
return U8String.FromNative (handle); |
|||
} |
|||
|
|||
/** |
|||
* Converts the buffer (as in ToString()) and release it. |
|||
* @return managed string representation of the buffer |
|||
*/ |
|||
public string Transform () |
|||
{ |
|||
string value = ToString (); |
|||
Close (); |
|||
return value; |
|||
} |
|||
}; |
|||
}; |
|||
@ -1 +0,0 @@ |
|||
testvlc.exe |
|||
@ -1,14 +0,0 @@ |
|||
EXTRA_DIST = $(SOURCES_testvlc) |
|||
MOSTLYCLEANFILES = $(check_SCRIPTS) |
|||
|
|||
noinst_SCRIPTS = testvlc.exe |
|||
dist_check_SCRIPTS = missing_api |
|||
|
|||
SOURCES_testvlc = testvlc.cs |
|||
LDADD_testvlc = -lib:../src -r:VideoLAN.LibVLC.dll |
|||
|
|||
testvlc.exe: $(SOURCES_testvlc) ../src/VideoLAN.LibVLC.dll |
|||
$(CSC) -target:exe -out:$@ $(CSFLAGS) $(SOURCES_testvlc) \
|
|||
$(LDADD_testvlc) |
|||
|
|||
TESTS = missing_api |
|||
@ -1,41 +0,0 @@ |
|||
#! /bin/sh |
|||
# Finds LibVLC API mismatch within the CIL bindings |
|||
# Copyright 2008 Rémi Denis-Courmont |
|||
|
|||
if test "${srcdir}" = ""; then |
|||
srcdir="$(dirname "$0")" |
|||
fi |
|||
|
|||
libvlcsym="${srcdir}/../../../src/libvlc.sym" |
|||
if ! test -f "${libvlcsym}"; then |
|||
echo "Cannot find ${libvlcsym}\!" >&2 |
|||
exit 77 |
|||
fi |
|||
|
|||
cat ${srcdir}/../src/*.cs | \ |
|||
sed -n -e 's,^.*EntryPoint="\([^"]*\)".*$,\1,p' | { |
|||
cat |
|||
# Symbols we do not need: |
|||
echo 'libvlc_exception_raise' |
|||
} | \ |
|||
sort -u | \ |
|||
diff -u - "${libvlcsym}" | \ |
|||
grep -ve '^+\(mediacontrol_\|libvlc_playlist_\)' | { |
|||
read line # --- |
|||
read line # +++ |
|||
broken=no |
|||
while read line; do |
|||
match="${line#+}" |
|||
if test "${line}" != "${match}"; then |
|||
echo "Unimplemented: $match" |
|||
broken=yes |
|||
fi |
|||
|
|||
match="${line#-}" |
|||
if test "${line}" != "${match}"; then |
|||
echo "Invalid: $match" |
|||
broken=yes |
|||
fi |
|||
done |
|||
test "${broken}" = "no" |
|||
} |
|||
@ -1,101 +0,0 @@ |
|||
/* |
|||
* testvlc.cs - tests for libvlc CIL bindings |
|||
* |
|||
* $Id$ |
|||
*/ |
|||
|
|||
/********************************************************************** |
|||
* Copyright (C) 2007 Rémi Denis-Courmont. * |
|||
* This program is free software; you can redistribute and/or modify * |
|||
* it under the terms of the GNU General Public License as published * |
|||
* by the Free Software Foundation; version 2 of the license, or (at * |
|||
* your option) any later version. * |
|||
* * |
|||
* This program is distributed in the hope that it will be useful, * |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * |
|||
* See the GNU General Public License for more details. * |
|||
* * |
|||
* You should have received a copy of the GNU General Public License * |
|||
* along with this program; if not, you can get it from: * |
|||
* http://www.gnu.org/copyleft/gpl.html *
|
|||
**********************************************************************/ |
|||
|
|||
using System; |
|||
using VideoLAN.LibVLC; |
|||
|
|||
namespace VideoLAN.LibVLC.Test |
|||
{ |
|||
public sealed class Test |
|||
{ |
|||
private static void DumpMedia (Media m) |
|||
{ |
|||
Console.WriteLine ("Media: {0} {1} (duration: {2}, {3}preparsed)", |
|||
m.State, m.Location, m.Duration, |
|||
m.IsPreparsed ? "" : "not "); |
|||
} |
|||
|
|||
private static void WriteMediaState (Media m, State s) |
|||
{ |
|||
Console.WriteLine (" -> {0}", s); |
|||
} |
|||
|
|||
private static void DumpPlayer (Player p) |
|||
{ |
|||
if (!p.IsPlaying) |
|||
return; |
|||
|
|||
int percent = (int)(p.Position * 100); |
|||
Console.Write ("{0}: {1} of {2} ms ({3}%)\r", p.State, |
|||
p.Time, p.Length, percent); |
|||
} |
|||
|
|||
private static void Sleep (int msec) |
|||
{ |
|||
System.Threading.Thread.Sleep (msec); |
|||
} |
|||
|
|||
public static int Main (string[] args) |
|||
{ |
|||
string[] argv = new string[]{ |
|||
"-vv", "-I", "dummy", "--plugin-path=../../modules" |
|||
}; |
|||
|
|||
Console.WriteLine ("Running on LibVLC {0} ({1})", VLC.Version, |
|||
VLC.ChangeSet); |
|||
Console.WriteLine (" (compiled with {0})", VLC.Compiler); |
|||
|
|||
VLC vlc = new VLC (argv); |
|||
foreach (string mrl in args) |
|||
{ |
|||
Media media = new Media (vlc, mrl); |
|||
Player player = new Player (media); |
|||
|
|||
DumpMedia (media); |
|||
DumpMedia ((Media)media.Clone ()); |
|||
media.StateChanged += WriteMediaState; |
|||
|
|||
/*foreach (MetaType type in Enum.GetValues (typeof (MetaType))) |
|||
{ |
|||
string meta = media.GetMeta (type); |
|||
if (meta != null) |
|||
Console.WriteLine (" {0}: {1}", type, meta); |
|||
}*/ |
|||
|
|||
player.Play (); |
|||
do |
|||
{ |
|||
DumpPlayer (player); |
|||
Sleep (500); |
|||
} |
|||
while (player.IsPlaying); |
|||
player.Stop (); |
|||
media.Dispose (); |
|||
player.Dispose (); |
|||
} |
|||
|
|||
vlc.Dispose (); |
|||
return 0; |
|||
} |
|||
}; |
|||
}; |
|||
Loading…
Reference in new issue