Commit dff43436 authored by Jean-Paul Saman's avatar Jean-Paul Saman

Merge branch 'master' of git@git.videolan.org:vlc

parents c72f2f9d 87db766d
...@@ -133,7 +133,7 @@ public class MediaList ...@@ -133,7 +133,7 @@ public class MediaList
} }
/** /**
* @param media The media descriptor mrl. * @param mrl The media descriptor mrl.
*/ */
public boolean removeMedia(String mrl) public boolean removeMedia(String mrl)
{ {
......
...@@ -38,6 +38,8 @@ public class VLMTest ...@@ -38,6 +38,8 @@ public class VLMTest
private String mrl = getClass().getResource("/raffa_voice.ogg").getFile(); private String mrl = getClass().getResource("/raffa_voice.ogg").getFile();
private String mediaName = "test";
@Before @Before
public void setup() public void setup()
{ {
...@@ -62,18 +64,89 @@ public class VLMTest ...@@ -62,18 +64,89 @@ public class VLMTest
public void testAddBroadcast() public void testAddBroadcast()
{ {
VLM vlm = jvlc.getVLM(); VLM vlm = jvlc.getVLM();
vlm.addBroadcast("test", "file://" + mrl, "", null, true, false); vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
} }
@Test @Test
public void testShowMedia() public void testShowMedia()
{ {
VLM vlm = jvlc.getVLM(); VLM vlm = jvlc.getVLM();
vlm.addBroadcast("test", "file://" + mrl, "", null, true, false); vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.showMedia("test"); vlm.showMedia(mediaName);
}
@Test
public void testDisableMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.disableMedia(mediaName);
}
@Test
public void testPlayMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.playMedia(mediaName);
}
@Test
public void testPauseMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.playMedia(mediaName);
vlm.pauseMedia(mediaName);
}
@Test
public void testStopMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.playMedia(mediaName);
vlm.stopMedia(mediaName);
}
@Test
public void testSeekMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.playMedia(mediaName);
vlm.seekMedia(mediaName, 0.3f);
} }
@Test
public void testAddMediaInput()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, true, false);
vlm.addMediaInput(mediaName, "file://" + mrl);
}
@Test
public void testEnableMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, false, false);
vlm.enableMedia(mediaName);
}
@Test
public void testDeleteMedia()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, false, false);
vlm.deleteMedia(mediaName);
}
@Test
public void testMediaLoop()
{
VLM vlm = jvlc.getVLM();
vlm.addBroadcast(mediaName, "file://" + mrl, "", null, false, false);
vlm.setMediaLoop(mediaName, true);
}
} }
private.m4
dnl Private VLC macros - generated by bootstrap
dnl Helper macro for vlc-config generation
AC_DEFUN([VLC_CONFIG_HELPER], [
cat >> vlc-config.in << BLAH
access_file) list="\${list} access/libaccess_file" ;;
access_mmap) list="\${list} access/libaccess_mmap" ;;
access_directory) list="\${list} access/libaccess_directory" ;;
access_dv) list="\${list} access/libaccess_dv" ;;
access_udp) list="\${list} access/libaccess_udp" ;;
access_tcp) list="\${list} access/libaccess_tcp" ;;
access_http) list="\${list} access/libaccess_http" ;;
access_ftp) list="\${list} access/libaccess_ftp" ;;
access_smb) list="\${list} access/libaccess_smb" ;;
access_gnomevfs) list="\${list} access/libaccess_gnomevfs" ;;
access_eyetv) list="\${list} access/libaccess_eyetv" ;;
dvdnav) list="\${list} access/libdvdnav" ;;
dvdread) list="\${list} access/libdvdread" ;;
dc1394) list="\${list} access/libdc1394" ;;
access_fake) list="\${list} access/libaccess_fake" ;;
pvr) list="\${list} access/libpvr" ;;
v4l) list="\${list} access/libv4l" ;;
cdda) list="\${list} access/libcdda" ;;
access_jack) list="\${list} access/libaccess_jack" ;;
bda) list="\${list} access/bda/libbda" ;;
dshow) list="\${list} access/dshow/libdshow" ;;
dvb) list="\${list} access/dvb/libdvb" ;;
access_mms) list="\${list} access/mms/libaccess_mms" ;;
cddax) list="\${list} access/cdda/libcddax" ;;
access_realrtsp) list="\${list} access/rtsp/libaccess_realrtsp" ;;
access_rtmp) list="\${list} access/rtmp/libaccess_rtmp" ;;
v4l2) list="\${list} access/v4l2/libv4l2" ;;
vcd) list="\${list} access/vcd/libvcd" ;;
vcdx) list="\${list} access/vcdx/libvcdx" ;;
screen) list="\${list} access/screen/libscreen" ;;
access_filter_timeshift) list="\${list} access_filter/libaccess_filter_timeshift" ;;
access_filter_record) list="\${list} access_filter/libaccess_filter_record" ;;
access_filter_dump) list="\${list} access_filter/libaccess_filter_dump" ;;
access_filter_bandwidth) list="\${list} access_filter/libaccess_filter_bandwidth" ;;
access_output_dummy) list="\${list} access_output/libaccess_output_dummy" ;;
access_output_file) list="\${list} access_output/libaccess_output_file" ;;
access_output_udp) list="\${list} access_output/libaccess_output_udp" ;;
access_output_http) list="\${list} access_output/libaccess_output_http" ;;
access_output_shout) list="\${list} access_output/libaccess_output_shout" ;;
equalizer) list="\${list} audio_filter/libequalizer" ;;
normvol) list="\${list} audio_filter/libnormvol" ;;
audio_format) list="\${list} audio_filter/libaudio_format" ;;
param_eq) list="\${list} audio_filter/libparam_eq" ;;
trivial_channel_mixer) list="\${list} audio_filter/channel_mixer/libtrivial_channel_mixer" ;;
simple_channel_mixer) list="\${list} audio_filter/channel_mixer/libsimple_channel_mixer" ;;
headphone_channel_mixer) list="\${list} audio_filter/channel_mixer/libheadphone_channel_mixer" ;;
dolby_surround_decoder) list="\${list} audio_filter/channel_mixer/libdolby_surround_decoder" ;;
mono) list="\${list} audio_filter/channel_mixer/libmono" ;;
converter_fixed) list="\${list} audio_filter/converter/libconverter_fixed" ;;
converter_float) list="\${list} audio_filter/converter/libconverter_float" ;;
a52tospdif) list="\${list} audio_filter/converter/liba52tospdif" ;;
a52tofloat32) list="\${list} audio_filter/converter/liba52tofloat32" ;;
dtstospdif) list="\${list} audio_filter/converter/libdtstospdif" ;;
dtstofloat32) list="\${list} audio_filter/converter/libdtstofloat32" ;;
mpgatofixed32) list="\${list} audio_filter/converter/libmpgatofixed32" ;;
trivial_resampler) list="\${list} audio_filter/resampler/libtrivial_resampler" ;;
ugly_resampler) list="\${list} audio_filter/resampler/libugly_resampler" ;;
linear_resampler) list="\${list} audio_filter/resampler/liblinear_resampler" ;;
bandlimited_resampler) list="\${list} audio_filter/resampler/libbandlimited_resampler" ;;
spatializer) list="\${list} audio_filter/spatializer/libspatializer" ;;
trivial_mixer) list="\${list} audio_mixer/libtrivial_mixer" ;;
float32_mixer) list="\${list} audio_mixer/libfloat32_mixer" ;;
spdif_mixer) list="\${list} audio_mixer/libspdif_mixer" ;;
alsa) list="\${list} audio_output/libalsa" ;;
arts) list="\${list} audio_output/libarts" ;;
aout_directx) list="\${list} audio_output/libaout_directx" ;;
esd) list="\${list} audio_output/libesd" ;;
aout_file) list="\${list} audio_output/libaout_file" ;;
oss) list="\${list} audio_output/liboss" ;;
aout_sdl) list="\${list} audio_output/libaout_sdl" ;;
waveout) list="\${list} audio_output/libwaveout" ;;
hd1000a) list="\${list} audio_output/libhd1000a" ;;
portaudio) list="\${list} audio_output/libportaudio" ;;
auhal) list="\${list} audio_output/libauhal" ;;
jack) list="\${list} audio_output/libjack" ;;
pulse) list="\${list} audio_output/libpulse" ;;
a52) list="\${list} codec/liba52" ;;
cinepak) list="\${list} codec/libcinepak" ;;
dts) list="\${list} codec/libdts" ;;
flac) list="\${list} codec/libflac" ;;
lpcm) list="\${list} codec/liblpcm" ;;
araw) list="\${list} codec/libaraw" ;;
vorbis) list="\${list} codec/libvorbis" ;;
tarkin) list="\${list} codec/libtarkin" ;;
theora) list="\${list} codec/libtheora" ;;
tremor) list="\${list} codec/libtremor" ;;
speex) list="\${list} codec/libspeex" ;;
adpcm) list="\${list} codec/libadpcm" ;;
mpeg_audio) list="\${list} codec/libmpeg_audio" ;;
libmpeg2) list="\${list} codec/liblibmpeg2" ;;
rawvideo) list="\${list} codec/librawvideo" ;;
quicktime) list="\${list} codec/libquicktime" ;;
faad) list="\${list} codec/libfaad" ;;
dvbsub) list="\${list} codec/libdvbsub" ;;
telx) list="\${list} codec/libtelx" ;;
mash) list="\${list} codec/libmash" ;;
x264) list="\${list} codec/libx264" ;;
twolame) list="\${list} codec/libtwolame" ;;
dirac) list="\${list} codec/libdirac" ;;
png) list="\${list} codec/libpng" ;;
svcdsub) list="\${list} codec/libsvcdsub" ;;
cvdsub) list="\${list} codec/libcvdsub" ;;
fake) list="\${list} codec/libfake" ;;
realaudio) list="\${list} codec/librealaudio" ;;
sdl_image) list="\${list} codec/libsdl_image" ;;
zvbi) list="\${list} codec/libzvbi" ;;
csri) list="\${list} codec/libcsri" ;;
cdg) list="\${list} codec/libcdg" ;;
fluidsynth) list="\${list} codec/libfluidsynth" ;;
cc) list="\${list} codec/libcc" ;;
cmml) list="\${list} codec/cmml/libcmml" ;;
dmo) list="\${list} codec/dmo/libdmo" ;;
ffmpeg) list="\${list} codec/ffmpeg/libffmpeg" ;;
ffmpegaltivec) list="\${list} codec/ffmpeg/libffmpegaltivec" ;;
subsdec) list="\${list} codec/subtitles/libsubsdec" ;;
subsusf) list="\${list} codec/subtitles/libsubsusf" ;;
t140) list="\${list} codec/subtitles/libt140" ;;
spudec) list="\${list} codec/spudec/libspudec" ;;
xvmc) list="\${list} codec/xvmc/libxvmc" ;;
gestures) list="\${list} control/libgestures" ;;
showintf) list="\${list} control/libshowintf" ;;
telnet) list="\${list} control/libtelnet" ;;
netsync) list="\${list} control/libnetsync" ;;
ntservice) list="\${list} control/libntservice" ;;
hotkeys) list="\${list} control/libhotkeys" ;;
lirc) list="\${list} control/liblirc" ;;
rc) list="\${list} control/librc" ;;
dbus) list="\${list} control/libdbus" ;;
motion) list="\${list} control/libmotion" ;;
http) list="\${list} control/http/libhttp" ;;
a52sys) list="\${list} demux/liba52sys" ;;
dtssys) list="\${list} demux/libdtssys" ;;
flacsys) list="\${list} demux/libflacsys" ;;
ogg) list="\${list} demux/libogg" ;;
demuxdump) list="\${list} demux/libdemuxdump" ;;
rawdv) list="\${list} demux/librawdv" ;;
rawvid) list="\${list} demux/librawvid" ;;
au) list="\${list} demux/libau" ;;
wav) list="\${list} demux/libwav" ;;
mkv) list="\${list} demux/libmkv" ;;
live555) list="\${list} demux/liblive555" ;;
nsv) list="\${list} demux/libnsv" ;;
real) list="\${list} demux/libreal" ;;
ts) list="\${list} demux/libts" ;;
ps) list="\${list} demux/libps" ;;
mod) list="\${list} demux/libmod" ;;
pva) list="\${list} demux/libpva" ;;
aiff) list="\${list} demux/libaiff" ;;
mjpeg) list="\${list} demux/libmjpeg" ;;
subtitle) list="\${list} demux/libsubtitle" ;;
asademux) list="\${list} demux/libasademux" ;;
ty) list="\${list} demux/libty" ;;
vobsub) list="\${list} demux/libvobsub" ;;
voc) list="\${list} demux/libvoc" ;;
xa) list="\${list} demux/libxa" ;;
nuv) list="\${list} demux/libnuv" ;;
nsc) list="\${list} demux/libnsc" ;;
mpc) list="\${list} demux/libmpc" ;;
gme) list="\${list} demux/libgme" ;;
tta) list="\${list} demux/libtta" ;;
vc1) list="\${list} demux/libvc1" ;;
demux_cdg) list="\${list} demux/libdemux_cdg" ;;
smf) list="\${list} demux/libsmf" ;;
asf) list="\${list} demux/asf/libasf" ;;
avi) list="\${list} demux/avi/libavi" ;;
mp4) list="\${list} demux/mp4/libmp4" ;;
m4a) list="\${list} demux/mpeg/libm4a" ;;
m4v) list="\${list} demux/mpeg/libm4v" ;;
mpga) list="\${list} demux/mpeg/libmpga" ;;
mpgv) list="\${list} demux/mpeg/libmpgv" ;;
h264) list="\${list} demux/mpeg/libh264" ;;
playlist) list="\${list} demux/playlist/libplaylist" ;;
ncurses) list="\${list} gui/libncurses" ;;
fbosd) list="\${list} gui/libfbosd" ;;
beos) list="\${list} gui/beos/libbeos" ;;
pda) list="\${list} gui/pda/libpda" ;;
macosx) list="\${list} gui/macosx/libmacosx" ;;
minimal_macosx) list="\${list} gui/minimal_macosx/libminimal_macosx" ;;
qnx) list="\${list} gui/qnx/libqnx" ;;
qt4) list="\${list} gui/qt4/libqt4" ;;
skins2) list="\${list} gui/skins2/libskins2" ;;
wxwidgets) list="\${list} gui/wxwidgets/libwxwidgets" ;;
wince) list="\${list} gui/wince/libwince" ;;
folder) list="\${list} meta_engine/libfolder" ;;
id3tag) list="\${list} meta_engine/libid3tag" ;;
musicbrainz) list="\${list} meta_engine/libmusicbrainz" ;;
taglib) list="\${list} meta_engine/libtaglib" ;;
gtk_main) list="\${list} misc/libgtk_main" ;;
gnome_main) list="\${list} misc/libgnome_main" ;;
gtk2_main) list="\${list} misc/libgtk2_main" ;;
gnome2_main) list="\${list} misc/libgnome2_main" ;;
screensaver) list="\${list} misc/libscreensaver" ;;
qte_main) list="\${list} misc/libqte_main" ;;
freetype) list="\${list} misc/libfreetype" ;;
win32text) list="\${list} misc/libwin32text" ;;
quartztext) list="\${list} misc/libquartztext" ;;
logger) list="\${list} misc/liblogger" ;;
vod_rtsp) list="\${list} misc/libvod_rtsp" ;;
gnutls) list="\${list} misc/libgnutls" ;;
svg) list="\${list} misc/libsvg" ;;
profile_parser) list="\${list} misc/libprofile_parser" ;;
audioscrobbler) list="\${list} misc/libaudioscrobbler" ;;
inhibit) list="\${list} misc/libinhibit" ;;
dummy) list="\${list} misc/dummy/libdummy" ;;
lua) list="\${list} misc/lua/liblua" ;;
memcpy) list="\${list} misc/memcpy/libmemcpy" ;;
memcpymmx) list="\${list} misc/memcpy/libmemcpymmx" ;;
memcpymmxext) list="\${list} misc/memcpy/libmemcpymmxext" ;;
memcpy3dn) list="\${list} misc/memcpy/libmemcpy3dn" ;;
memcpyaltivec) list="\${list} misc/memcpy/libmemcpyaltivec" ;;
msn) list="\${list} misc/notify/libmsn" ;;
growl) list="\${list} misc/notify/libgrowl" ;;
growl_udp) list="\${list} misc/notify/libgrowl_udp" ;;
notify) list="\${list} misc/notify/libnotify" ;;
xosd) list="\${list} misc/notify/libxosd" ;;
telepathy) list="\${list} misc/notify/libtelepathy" ;;
test1) list="\${list} misc/testsuite/libtest1" ;;
test2) list="\${list} misc/testsuite/libtest2" ;;
test3) list="\${list} misc/testsuite/libtest3" ;;
test4) list="\${list} misc/testsuite/libtest4" ;;
export) list="\${list} misc/playlist/libexport" ;;
osd_parser) list="\${list} misc/osd/libosd_parser" ;;
xtag) list="\${list} misc/xml/libxtag" ;;
xml) list="\${list} misc/xml/libxml" ;;
probe_hal) list="\${list} misc/probe/libprobe_hal" ;;
mux_dummy) list="\${list} mux/libmux_dummy" ;;
mux_avi) list="\${list} mux/libmux_avi" ;;
mux_ogg) list="\${list} mux/libmux_ogg" ;;
mux_mp4) list="\${list} mux/libmux_mp4" ;;
mux_asf) list="\${list} mux/libmux_asf" ;;
mux_wav) list="\${list} mux/libmux_wav" ;;
mux_mpjpeg) list="\${list} mux/libmux_mpjpeg" ;;
mux_ps) list="\${list} mux/mpeg/libmux_ps" ;;
mux_ts) list="\${list} mux/mpeg/libmux_ts" ;;
rtcp) list="\${list} mux/rtp/librtcp" ;;
packetizer_copy) list="\${list} packetizer/libpacketizer_copy" ;;
packetizer_mpegvideo) list="\${list} packetizer/libpacketizer_mpegvideo" ;;
packetizer_mpeg4video) list="\${list} packetizer/libpacketizer_mpeg4video" ;;
packetizer_mpeg4audio) list="\${list} packetizer/libpacketizer_mpeg4audio" ;;
packetizer_h264) list="\${list} packetizer/libpacketizer_h264" ;;
packetizer_vc1) list="\${list} packetizer/libpacketizer_vc1" ;;
sap) list="\${list} services_discovery/libsap" ;;
hal) list="\${list} services_discovery/libhal" ;;
shout) list="\${list} services_discovery/libshout" ;;
upnp_cc) list="\${list} services_discovery/libupnp_cc" ;;
upnp_intel) list="\${list} services_discovery/libupnp_intel" ;;
bonjour) list="\${list} services_discovery/libbonjour" ;;
podcast) list="\${list} services_discovery/libpodcast" ;;
stream_out_dummy) list="\${list} stream_out/libstream_out_dummy" ;;
stream_out_description) list="\${list} stream_out/libstream_out_description" ;;
stream_out_standard) list="\${list} stream_out/libstream_out_standard" ;;
stream_out_transcode) list="\${list} stream_out/libstream_out_transcode" ;;
stream_out_duplicate) list="\${list} stream_out/libstream_out_duplicate" ;;
stream_out_es) list="\${list} stream_out/libstream_out_es" ;;
stream_out_display) list="\${list} stream_out/libstream_out_display" ;;
stream_out_gather) list="\${list} stream_out/libstream_out_gather" ;;
stream_out_rtp) list="\${list} stream_out/libstream_out_rtp" ;;
stream_out_switcher) list="\${list} stream_out/libstream_out_switcher" ;;
stream_out_bridge) list="\${list} stream_out/libstream_out_bridge" ;;
stream_out_mosaic_bridge) list="\${list} stream_out/libstream_out_mosaic_bridge" ;;
stream_out_autodel) list="\${list} stream_out/libstream_out_autodel" ;;
stream_out_transrate) list="\${list} stream_out/transrate/libstream_out_transrate" ;;
i420_rgb) list="\${list} video_chroma/libi420_rgb" ;;
i420_rgb_mmx) list="\${list} video_chroma/libi420_rgb_mmx" ;;
i420_rgb_sse2) list="\${list} video_chroma/libi420_rgb_sse2" ;;
i420_yuy2) list="\${list} video_chroma/libi420_yuy2" ;;
i420_yuy2_mmx) list="\${list} video_chroma/libi420_yuy2_mmx" ;;
i420_yuy2_sse2) list="\${list} video_chroma/libi420_yuy2_sse2" ;;
i420_yuy2_altivec) list="\${list} video_chroma/libi420_yuy2_altivec" ;;
i422_yuy2) list="\${list} video_chroma/libi422_yuy2" ;;
i422_yuy2_mmx) list="\${list} video_chroma/libi422_yuy2_mmx" ;;
i422_yuy2_sse2) list="\${list} video_chroma/libi422_yuy2_sse2" ;;
i422_i420) list="\${list} video_chroma/libi422_i420" ;;
i420_ymga) list="\${list} video_chroma/libi420_ymga" ;;
i420_ymga_mmx) list="\${list} video_chroma/libi420_ymga_mmx" ;;
grey_yuv) list="\${list} video_chroma/libgrey_yuv" ;;
yuy2_i422) list="\${list} video_chroma/libyuy2_i422" ;;
yuy2_i420) list="\${list} video_chroma/libyuy2_i420" ;;
chroma_chain) list="\${list} video_chroma/libchroma_chain" ;;
mosaic) list="\${list} video_filter/libmosaic" ;;
transform) list="\${list} video_filter/libtransform" ;;
invert) list="\${list} video_filter/libinvert" ;;
adjust) list="\${list} video_filter/libadjust" ;;
wall) list="\${list} video_filter/libwall" ;;
clone) list="\${list} video_filter/libclone" ;;
crop) list="\${list} video_filter/libcrop" ;;
motionblur) list="\${list} video_filter/libmotionblur" ;;
logo) list="\${list} video_filter/liblogo" ;;
deinterlace) list="\${list} video_filter/libdeinterlace" ;;
blend) list="\${list} video_filter/libblend" ;;
scale) list="\${list} video_filter/libscale" ;;
marq) list="\${list} video_filter/libmarq" ;;
rss) list="\${list} video_filter/librss" ;;
motiondetect) list="\${list} video_filter/libmotiondetect" ;;
rv32) list="\${list} video_filter/librv32" ;;
osdmenu) list="\${list} video_filter/libosdmenu" ;;
magnify) list="\${list} video_filter/libmagnify" ;;
wave) list="\${list} video_filter/libwave" ;;
ripple) list="\${list} video_filter/libripple" ;;
psychedelic) list="\${list} video_filter/libpsychedelic" ;;
gradient) list="\${list} video_filter/libgradient" ;;
panoramix) list="\${list} video_filter/libpanoramix" ;;
opencv_wrapper) list="\${list} video_filter/libopencv_wrapper" ;;
opencv_example) list="\${list} video_filter/libopencv_example" ;;
rotate) list="\${list} video_filter/librotate" ;;
noise) list="\${list} video_filter/libnoise" ;;
puzzle) list="\${list} video_filter/libpuzzle" ;;
colorthres) list="\${list} video_filter/libcolorthres" ;;
extract) list="\${list} video_filter/libextract" ;;
sharpen) list="\${list} video_filter/libsharpen" ;;
erase) list="\${list} video_filter/liberase" ;;
bluescreen) list="\${list} video_filter/libbluescreen" ;;
alphamask) list="\${list} video_filter/libalphamask" ;;
gaussianblur) list="\${list} video_filter/libgaussianblur" ;;
grain) list="\${list} video_filter/libgrain" ;;
seamcarving) list="\${list} video_filter/libseamcarving" ;;
croppadd) list="\${list} video_filter/libcroppadd" ;;
atmo) list="\${list} video_filter/atmo/libatmo" ;;
aa) list="\${list} video_output/libaa" ;;
caca) list="\${list} video_output/libcaca" ;;
fb) list="\${list} video_output/libfb" ;;
ggi) list="\${list} video_output/libggi" ;;
glide) list="\${list} video_output/libglide" ;;
vout_sdl) list="\${list} video_output/libvout_sdl" ;;
svgalib) list="\${list} video_output/libsvgalib" ;;
mga) list="\${list} video_output/libmga" ;;
hd1000v) list="\${list} video_output/libhd1000v" ;;
snapshot) list="\${list} video_output/libsnapshot" ;;
opengl) list="\${list} video_output/libopengl" ;;
opengllayer) list="\${list} video_output/libopengllayer" ;;
image) list="\${list} video_output/libimage" ;;
directfb) list="\${list} video_output/libdirectfb" ;;
vmem) list="\${list} video_output/libvmem" ;;
vout_directx) list="\${list} video_output/msw/libvout_directx" ;;
direct3d) list="\${list} video_output/msw/libdirect3d" ;;
glwin32) list="\${list} video_output/msw/libglwin32" ;;
wingdi) list="\${list} video_output/msw/libwingdi" ;;
wingapi) list="\${list} video_output/msw/libwingapi" ;;
qte) list="\${list} video_output/qte/libqte" ;;
x11) list="\${list} video_output/x11/libx11" ;;
xvideo) list="\${list} video_output/x11/libxvideo" ;;
glx) list="\${list} video_output/x11/libglx" ;;
xvmc) list="\${list} video_output/x11/libxvmc" ;;
goom) list="\${list} visualization/libgoom" ;;
visual) list="\${list} visualization/visual/libvisual" ;;
galaktos) list="\${list} visualization/galaktos/libgalaktos" ;;
BLAH
])
...@@ -127,7 +127,7 @@ typedef struct http_auth_t ...@@ -127,7 +127,7 @@ typedef struct http_auth_t
char *psz_qop; char *psz_qop;
int i_nonce; int i_nonce;
char *psz_cnonce; char *psz_cnonce;
char *psz_A1; /* stored A1 value if algorithm = "MD5-sess" */ char *psz_HA1; /* stored H(A1) value if algorithm = "MD5-sess" */
} http_auth_t; } http_auth_t;
struct access_sys_t struct access_sys_t
...@@ -209,6 +209,8 @@ static void AuthParseHeader( access_t *p_access, const char *psz_header, ...@@ -209,6 +209,8 @@ static void AuthParseHeader( access_t *p_access, const char *psz_header,
http_auth_t *p_auth ); http_auth_t *p_auth );
static void AuthReply( access_t *p_acces, const char *psz_prefix, static void AuthReply( access_t *p_acces, const char *psz_prefix,
vlc_url_t *p_url, http_auth_t *p_auth ); vlc_url_t *p_url, http_auth_t *p_auth );
static int AuthCheckReply( access_t *p_access, const char *psz_header,
vlc_url_t *p_url, http_auth_t *p_auth );
static void AuthReset( http_auth_t *p_auth ); static void AuthReset( http_auth_t *p_auth );
/***************************************************************************** /*****************************************************************************
...@@ -1360,8 +1362,15 @@ static int Request( access_t *p_access, int64_t i_tell ) ...@@ -1360,8 +1362,15 @@ static int Request( access_t *p_access, int64_t i_tell )
} }
else if( !strcasecmp( psz, "authentication-info" ) ) else if( !strcasecmp( psz, "authentication-info" ) )
{ {
msg_Dbg( p_access, "Authentication info: %s", p ); msg_Dbg( p_access, "Authentication Info header: %s", p );
/* FIXME: use */ if( AuthCheckReply( p_access, p, &p_sys->url, &p_sys->auth ) )
goto error;
}
else if( !strcasecmp( psz, "proxy-authentication-info" ) )
{
msg_Dbg( p_access, "Proxy Authentication Info header: %s", p );
if( AuthCheckReply( p_access, p, &p_sys->proxy, &p_sys->proxy_auth ) )
goto error;
} }
free( psz ); free( psz );
...@@ -1511,11 +1520,8 @@ static char *AuthGetParam( const char *psz_header, const char *psz_param ) ...@@ -1511,11 +1520,8 @@ static char *AuthGetParam( const char *psz_header, const char *psz_param )
const char *psz_end; const char *psz_end;
psz_header += strlen( psz_what ); psz_header += strlen( psz_what );
psz_end = strchr( psz_header, '"' ); psz_end = strchr( psz_header, '"' );
if( !psz_end ) if( !psz_end ) /* Invalid since we should have a closing quote */
{ return strdup( psz_header );
psz_end = psz_header;
while( *psz_end ) psz_end++;
}
return strndup( psz_header, psz_end - psz_header ); return strndup( psz_header, psz_end - psz_header );
} }
else else
...@@ -1526,7 +1532,7 @@ static char *AuthGetParam( const char *psz_header, const char *psz_param ) ...@@ -1526,7 +1532,7 @@ static char *AuthGetParam( const char *psz_header, const char *psz_param )
static char *AuthGetParamNoQuotes( const char *psz_header, const char *psz_param ) static char *AuthGetParamNoQuotes( const char *psz_header, const char *psz_param )
{ {
char psz_what[strlen(psz_param)+3]; char psz_what[strlen(psz_param)+2];
sprintf( psz_what, "%s=", psz_param ); sprintf( psz_what, "%s=", psz_param );
psz_header = strstr( psz_header, psz_what ); psz_header = strstr( psz_header, psz_what );
if( psz_header ) if( psz_header )
...@@ -1534,11 +1540,10 @@ static char *AuthGetParamNoQuotes( const char *psz_header, const char *psz_param ...@@ -1534,11 +1540,10 @@ static char *AuthGetParamNoQuotes( const char *psz_header, const char *psz_param
const char *psz_end; const char *psz_end;
psz_header += strlen( psz_what ); psz_header += strlen( psz_what );
psz_end = strchr( psz_header, ',' ); psz_end = strchr( psz_header, ',' );
if( !psz_end ) /* XXX: Do we need to filter out trailing space between the value and
{ * the comma/end of line? */
psz_end = psz_header; if( !psz_end ) /* Can be valid if this is the last parameter */
while( *psz_end ) psz_end++; return strdup( psz_header );
}
return strndup( psz_header, psz_end - psz_header ); return strndup( psz_header, psz_end - psz_header );
} }
else else
...@@ -1576,14 +1581,18 @@ static void AuthParseHeader( access_t *p_access, const char *psz_header, ...@@ -1576,14 +1581,18 @@ static void AuthParseHeader( access_t *p_access, const char *psz_header,
p_auth->psz_algorithm = AuthGetParamNoQuotes( psz_header, "algorithm" ); p_auth->psz_algorithm = AuthGetParamNoQuotes( psz_header, "algorithm" );
p_auth->psz_qop = AuthGetParam( psz_header, "qop" ); p_auth->psz_qop = AuthGetParam( psz_header, "qop" );
p_auth->i_nonce = 0; p_auth->i_nonce = 0;
/* printf("realm: %s\ndomain: %s\nnonce: %s\nopaque: %s\nstale: %s\nalgorithm: %s\nqop: %s\n",p_auth->psz_realm,p_auth->psz_domain,p_auth->psz_nonce,p_auth->psz_opaque,p_auth->psz_stale,p_auth->psz_algorithm,p_auth->psz_qop); */ /* printf("realm: |%s|\ndomain: |%s|\nnonce: |%s|\nopaque: |%s|\n"
"stale: |%s|\nalgorithm: |%s|\nqop: |%s|\n",
p_auth->psz_realm,p_auth->psz_domain,p_auth->psz_nonce,
p_auth->psz_opaque,p_auth->psz_stale,p_auth->psz_algorithm,
p_auth->psz_qop); */
if( !p_auth->psz_realm ) if( !p_auth->psz_realm )
msg_Warn( p_access, "Digest Access Authentication: " msg_Warn( p_access, "Digest Access Authentication: "
"Mandatory 'realm' parameter is missing" ); "Mandatory 'realm' parameter is missing" );
if( !p_auth->psz_nonce ) if( !p_auth->psz_nonce )
msg_Warn( p_access, "Digest Access Authentication: " msg_Warn( p_access, "Digest Access Authentication: "
"Mandatory 'nonce' parameter is missing" ); "Mandatory 'nonce' parameter is missing" );
if( p_auth->psz_qop ) /* FIXME */ if( p_auth->psz_qop ) /* FIXME: parse the qop list */
{ {
char *psz_tmp = strchr( p_auth->psz_qop, ',' ); char *psz_tmp = strchr( p_auth->psz_qop, ',' );
if( psz_tmp ) *psz_tmp = '\0'; if( psz_tmp ) *psz_tmp = '\0';
...@@ -1592,27 +1601,121 @@ static void AuthParseHeader( access_t *p_access, const char *psz_header, ...@@ -1592,27 +1601,121 @@ static void AuthParseHeader( access_t *p_access, const char *psz_header,
else else
{ {
const char *psz_end = strchr( psz_header, ' ' ); const char *psz_end = strchr( psz_header, ' ' );
if( !psz_end ) if( psz_end )
{ msg_Warn( p_access, "Unknown authentication scheme: '%*s'",
psz_end = psz_header; psz_end - psz_header, psz_header );
while( *psz_end ) psz_end++; else
} msg_Warn( p_access, "Unknown authentication scheme: '%s'",
msg_Warn( p_access, "Unknown authentication scheme: '%*s'", psz_header );
psz_end - psz_header, psz_header );
} }
} }
static char *AuthAlgoMD5( const char *psz_data ) static char *AuthDigest( access_t *p_access, vlc_url_t *p_url,
http_auth_t *p_auth, const char *psz_method )
{ {
(void)p_access;
const char *psz_username = p_url->psz_username ?: "";
const char *psz_password = p_url->psz_password ?: "";
char *psz_HA1 = NULL;
char *psz_HA2 = NULL;
char *psz_response = NULL;
struct md5_s md5; struct md5_s md5;
char *psz_md5;
/* H(A1) */
if( p_auth->psz_HA1 )
{
psz_HA1 = strdup( p_auth->psz_HA1 );
if( !psz_HA1 ) goto error;
}
else
{
InitMD5( &md5 );
AddMD5( &md5, psz_username, strlen( psz_username ) );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, p_auth->psz_realm, strlen( p_auth->psz_realm ) );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, psz_password, strlen( psz_password ) );
EndMD5( &md5 );
psz_HA1 = psz_md5_hash( &md5 );
if( !psz_HA1 ) goto error;
if( p_auth->psz_algorithm
&& !strcmp( p_auth->psz_algorithm, "MD5-sess" ) )
{
InitMD5( &md5 );
AddMD5( &md5, psz_HA1, 32 );
free( psz_HA1 );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, p_auth->psz_nonce, strlen( p_auth->psz_nonce ) );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, p_auth->psz_cnonce, strlen( p_auth->psz_cnonce ) );
EndMD5( &md5 );
psz_HA1 = psz_md5_hash( &md5 );
if( !psz_HA1 ) goto error;
p_auth->psz_HA1 = strdup( psz_HA1 );
if( !p_auth->psz_HA1 ) goto error;
}
}
/* H(A2) */
InitMD5( &md5 );
if( *psz_method )
AddMD5( &md5, psz_method, strlen( psz_method ) );
AddMD5( &md5, ":", 1 );
if( p_url->psz_path )
AddMD5( &md5, p_url->psz_path, strlen( p_url->psz_path ) );
else
AddMD5( &md5, "/", 1 );
if( p_auth->psz_qop && !strcmp( p_auth->psz_qop, "auth-int" ) )
{
char *psz_ent;
struct md5_s ent;
InitMD5( &ent );
AddMD5( &ent, "", 0 ); /* XXX: entity-body. should be ok for GET */
EndMD5( &ent );
psz_ent = psz_md5_hash( &ent );
if( !psz_ent ) goto error;
AddMD5( &md5, ":", 1 );
AddMD5( &md5, psz_ent, 32 );
free( psz_ent );
}
EndMD5( &md5 );
psz_HA2 = psz_md5_hash( &md5 );
if( !psz_HA2 ) goto error;
/* Request digest */
InitMD5( &md5 ); InitMD5( &md5 );
AddMD5( &md5, psz_data, strlen( psz_data ) ); AddMD5( &md5, psz_HA1, 32 );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, p_auth->psz_nonce, strlen( p_auth->psz_nonce ) );
AddMD5( &md5, ":", 1 );
if( p_auth->psz_qop
&& ( !strcmp( p_auth->psz_qop, "auth" )
|| !strcmp( p_auth->psz_qop, "auth-int" ) ) )
{
char psz_inonce[9];
snprintf( psz_inonce, 9, "%08x", p_auth->i_nonce );
AddMD5( &md5, psz_inonce, 8 );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, p_auth->psz_cnonce, strlen( p_auth->psz_cnonce ) );
AddMD5( &md5, ":", 1 );
AddMD5( &md5, p_auth->psz_qop, strlen( p_auth->psz_qop ) );
AddMD5( &md5, ":", 1 );
}
AddMD5( &md5, psz_HA2, 32 );
EndMD5( &md5 ); EndMD5( &md5 );
psz_md5 = psz_md5_hash( &md5 ); psz_response = psz_md5_hash( &md5 );
return psz_md5;
error:
free( psz_HA1 );
free( psz_HA2 );
return psz_response;
} }
static void AuthReply( access_t *p_access, const char *psz_prefix, static void AuthReply( access_t *p_access, const char *psz_prefix,
vlc_url_t *p_url, http_auth_t *p_auth ) vlc_url_t *p_url, http_auth_t *p_auth )
{ {
...@@ -1625,27 +1728,18 @@ static void AuthReply( access_t *p_access, const char *psz_prefix, ...@@ -1625,27 +1728,18 @@ static void AuthReply( access_t *p_access, const char *psz_prefix,
if( p_auth->psz_nonce ) if( p_auth->psz_nonce )
{ {
/* Digest Access Authentication */ /* Digest Access Authentication */
char *psz_response = NULL; char *psz_response;
char *psz_A1 = NULL;
char *psz_A2 = NULL; if( p_auth->psz_algorithm
char *psz_secret = NULL; && strcmp( p_auth->psz_algorithm, "MD5" )
char *psz_data = NULL; && strcmp( p_auth->psz_algorithm, "MD5-sess" ) )
char * (*pf_algo)( const char * );
if( p_auth->psz_algorithm == NULL
|| !strcmp( p_auth->psz_algorithm, "MD5" )
|| !strcmp( p_auth->psz_algorithm, "MD5-sess" ) )
{
pf_algo = AuthAlgoMD5;
}
else
{ {
msg_Err( p_access, "Digest Access Authentication: " msg_Err( p_access, "Digest Access Authentication: "
"Unknown algorithm '%s'", p_auth->psz_algorithm ); "Unknown algorithm '%s'", p_auth->psz_algorithm );
return;
} }
if( !pf_algo ) return;
if( p_auth->psz_qop ) if( p_auth->psz_qop || !p_auth->psz_cnonce )
{ {
/* FIXME: needs to be really random to prevent man in the middle /* FIXME: needs to be really random to prevent man in the middle
* attacks */ * attacks */
...@@ -1654,96 +1748,8 @@ static void AuthReply( access_t *p_access, const char *psz_prefix, ...@@ -1654,96 +1748,8 @@ static void AuthReply( access_t *p_access, const char *psz_prefix,
} }
p_auth->i_nonce ++; p_auth->i_nonce ++;
if( p_auth->psz_algorithm && !strcmp( p_auth->psz_algorithm, "MD5-sess" ) ) psz_response = AuthDigest( p_access, p_url, p_auth, "GET" );
{ if( !psz_response ) return;
if( !p_auth->psz_A1 )
{
char *psz_tmp = NULL;
if( asprintf( &psz_A1, "%s:%s:%s", psz_username,
p_auth->psz_realm, psz_password ) < 0 )
goto error;
psz_tmp = pf_algo( psz_A1 );
free( psz_A1 ); psz_A1 = NULL;
if( !psz_tmp ) goto error;
if( asprintf( &psz_A1, "%s:%s:%s", psz_tmp, p_auth->psz_nonce,
p_auth->psz_cnonce ) < 0 )
{
free( psz_tmp );
goto error;
}
p_auth->psz_A1 = strdup( psz_A1 );
}
else
{
psz_A1 = strdup( p_auth->psz_A1 );
}
}
else
{
if( asprintf( &psz_A1, "%s:%s:%s", psz_username, p_auth->psz_realm,
psz_password ) < 0 ) goto error;
}
if( !p_auth->psz_qop || !strcmp( p_auth->psz_qop, "auth" ) )
{
if( asprintf( &psz_A2, "%s:%s", "GET", p_url->psz_path ?: "/" )
< 0 ) goto error;
}
else
{
char *psz_tmp = pf_algo( "FIXME entity-body" ); /* FIXME */
if( asprintf( &psz_A2, "%s:%s:%s", "GET", p_url->psz_path ?: "/",
psz_tmp ) < 0 )
{
free( psz_tmp );
goto error;
}
free( psz_tmp );
}
psz_secret = pf_algo( psz_A1 );
if( p_auth->psz_qop
&& ( !strcmp( p_auth->psz_qop, "auth" )
|| !strcmp( p_auth->psz_qop, "auth-int" ) ) )
{
char *psz_tmp = pf_algo( psz_A2 );
if( !psz_tmp ) goto error;
if( asprintf( &psz_data, "%s:%08x:%s:%s:%s",
p_auth->psz_nonce, p_auth->i_nonce,
p_auth->psz_cnonce, p_auth->psz_qop, psz_tmp ) < 0 )
{
free( psz_tmp );
goto error;
}
free( psz_tmp );
}
else
{
char *psz_tmp = pf_algo( psz_A2 );
if( !psz_tmp ) goto error;
if( asprintf( &psz_data, "%s:%s", p_auth->psz_nonce, psz_tmp ) < 0 )
{
free( psz_tmp );
goto error;
}
free( psz_tmp );
}
if( psz_secret && psz_data )
{
char *psz_tmp = NULL;
if( asprintf( &psz_tmp, "%s:%s", psz_secret, psz_data ) < 0 )
goto error;
psz_response = pf_algo( psz_tmp );
free( psz_tmp );
if( !psz_response )
goto error;
}
else
{
goto error;
}
net_Printf( VLC_OBJECT(p_access), p_sys->fd, pvs, net_Printf( VLC_OBJECT(p_access), p_sys->fd, pvs,
"%sAuthorization: Digest " "%sAuthorization: Digest "
...@@ -1785,12 +1791,7 @@ static void AuthReply( access_t *p_access, const char *psz_prefix, ...@@ -1785,12 +1791,7 @@ static void AuthReply( access_t *p_access, const char *psz_prefix,
p_auth->i_nonce ? "\"" : "\"" p_auth->i_nonce ? "\"" : "\""
); );
error:
free( psz_response ); free( psz_response );
free( psz_A1 );
free( psz_A2 );
free( psz_secret );
free( psz_data );
} }
else else
{ {
...@@ -1810,6 +1811,70 @@ static void AuthReply( access_t *p_access, const char *psz_prefix, ...@@ -1810,6 +1811,70 @@ static void AuthReply( access_t *p_access, const char *psz_prefix,
} }
} }
static int AuthCheckReply( access_t *p_access, const char *psz_header,
vlc_url_t *p_url, http_auth_t *p_auth )
{
int i_ret = VLC_EGENERIC;
char *psz_nextnonce = AuthGetParam( psz_header, "nextnonce" );
char *psz_qop = AuthGetParamNoQuotes( psz_header, "qop" );
char *psz_rspauth = AuthGetParam( psz_header, "rspauth" );
char *psz_cnonce = AuthGetParam( psz_header, "cnonce" );
char *psz_nc = AuthGetParamNoQuotes( psz_header, "nc" );
if( psz_cnonce )
{
char *psz_digest;
if( strcmp( psz_cnonce, p_auth->psz_cnonce ) )
{
msg_Err( p_access, "HTTP Digest Access Authentication: server replied with a different client nonce value." );
goto error;
}
if( psz_nc )
{
int i_nonce;
i_nonce = strtol( psz_nc, NULL, 16 );
if( i_nonce != p_auth->i_nonce )
{
msg_Err( p_access, "HTTP Digest Access Authentication: server replied with a different nonce count value." );
goto error;
}
}
if( psz_qop && p_auth->psz_qop && strcmp( psz_qop, p_auth->psz_qop ) )
msg_Warn( p_access, "HTTP Digest Access Authentication: server replied using a different 'quality of protection' option" );
/* All the clear text values match, let's now check the response
* digest */
psz_digest = AuthDigest( p_access, p_url, p_auth, "" );
if( strcmp( psz_digest, psz_rspauth ) )
{
msg_Err( p_access, "HTTP Digest Access Authentication: server replied with an invalid response digest (expected value: %s).", psz_digest );
free( psz_digest );
goto error;
}
free( psz_digest );
}
if( psz_nextnonce )
{
free( p_auth->psz_nonce );
p_auth->psz_nonce = psz_nextnonce;
psz_nextnonce = NULL;
}
i_ret = VLC_SUCCESS;
error:
free( psz_nextnonce );
free( psz_qop );
free( psz_rspauth );
free( psz_cnonce );
free( psz_nc );
return i_ret;
}
static void AuthReset( http_auth_t *p_auth ) static void AuthReset( http_auth_t *p_auth )
{ {
FREENULL( p_auth->psz_realm ); FREENULL( p_auth->psz_realm );
...@@ -1821,5 +1886,5 @@ static void AuthReset( http_auth_t *p_auth ) ...@@ -1821,5 +1886,5 @@ static void AuthReset( http_auth_t *p_auth )
FREENULL( p_auth->psz_qop ); FREENULL( p_auth->psz_qop );
p_auth->i_nonce = 0; p_auth->i_nonce = 0;
FREENULL( p_auth->psz_cnonce ); FREENULL( p_auth->psz_cnonce );
FREENULL( p_auth->psz_A1 ); FREENULL( p_auth->psz_HA1 );
} }
...@@ -266,6 +266,10 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -266,6 +266,10 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
{ {
p_dec->fmt_out.audio.i_rate = i_rate; p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels; p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= pi_channels_guessed[i_channels];
aout_DateInit( &p_sys->date, i_rate ); aout_DateInit( &p_sys->date, i_rate );
} }
} }
...@@ -286,6 +290,9 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -286,6 +290,9 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
p_dec->fmt_out.audio.i_rate = i_rate; p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels; p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= pi_channels_guessed[i_channels];
aout_DateInit( &p_sys->date, i_rate ); aout_DateInit( &p_sys->date, i_rate );
} }
...@@ -362,6 +369,9 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) ...@@ -362,6 +369,9 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
p_dec->fmt_out.audio.i_rate = frame.samplerate; p_dec->fmt_out.audio.i_rate = frame.samplerate;
p_dec->fmt_out.audio.i_channels = frame.channels; p_dec->fmt_out.audio.i_channels = frame.channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= pi_channels_guessed[frame.channels];
/* Adjust stream info when dealing with SBR/PS */ /* Adjust stream info when dealing with SBR/PS */
if( (p_sys->b_sbr != frame.sbr || p_sys->b_ps != frame.ps) && if( (p_sys->b_sbr != frame.sbr || p_sys->b_ps != frame.ps) &&
......
...@@ -601,12 +601,14 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id, ...@@ -601,12 +601,14 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
answer->i_status = 200; answer->i_status = 200;
psz_session = httpd_MsgGet( query, "Session" ); psz_session = httpd_MsgGet( query, "Session" );
#if 0
/* FIXME: This breaks totem, mplayer and quicktime at least */
if( httpd_MsgGet( query, "Range" ) != NULL ) if( httpd_MsgGet( query, "Range" ) != NULL )
{ {
answer->i_status = 456; /* cannot seek */ answer->i_status = 456; /* cannot seek */
break; break;
} }
#endif
vlc_mutex_lock( &rtsp->lock ); vlc_mutex_lock( &rtsp->lock );
ses = RtspClientGet( rtsp, psz_session ); ses = RtspClientGet( rtsp, psz_session );
if( ses != NULL ) if( ses != NULL )
......
...@@ -426,7 +426,7 @@ int E_(Activate) ( vlc_object_t *p_this ) ...@@ -426,7 +426,7 @@ int E_(Activate) ( vlc_object_t *p_this )
msg_Dbg(p_vout, "Deinterlace = %d", p_vout->p_sys->xvmc_deinterlace_method); msg_Dbg(p_vout, "Deinterlace = %d", p_vout->p_sys->xvmc_deinterlace_method);
msg_Dbg(p_vout, "Crop = %d", p_vout->p_sys->xvmc_crop_style); msg_Dbg(p_vout, "Crop = %d", p_vout->p_sys->xvmc_crop_style);
if( !checkXvMCCap( p_vout ) ) if( checkXvMCCap( p_vout ) == VLC_EGENERIC )
{ {
msg_Err( p_vout, "no XVMC capability found" ); msg_Err( p_vout, "no XVMC capability found" );
E_(Deactivate)( p_vout ); E_(Deactivate)( p_vout );
......
...@@ -148,7 +148,7 @@ vlc_module_begin(); ...@@ -148,7 +148,7 @@ vlc_module_begin();
add_string( "xvmc-crop-style", "eq", NULL, CROP_TEXT, CROP_LONGTEXT, VLC_FALSE ); add_string( "xvmc-crop-style", "eq", NULL, CROP_TEXT, CROP_LONGTEXT, VLC_FALSE );
set_description( _("XVMC extension video output") ); set_description( _("XVMC extension video output") );
set_capability( "video output", 160 ); set_capability( "video output", 10 );
set_callbacks( E_(Activate), E_(Deactivate) ); set_callbacks( E_(Activate), E_(Deactivate) );
vlc_module_end(); vlc_module_end();
...@@ -474,10 +474,10 @@ void blend_xx44( uint8_t *dst_img, subpicture_t *sub_img, ...@@ -474,10 +474,10 @@ void blend_xx44( uint8_t *dst_img, subpicture_t *sub_img,
int xxmc_xvmc_surface_valid( vout_thread_t *p_vout, XvMCSurface *surf ) int xxmc_xvmc_surface_valid( vout_thread_t *p_vout, XvMCSurface *surf )
{ {
xvmc_surface_handler_t *handler = &p_vout->p_sys->xvmc_surf_handler; xvmc_surface_handler_t *handler = &p_vout->p_sys->xvmc_surf_handler;
unsigned int index = surf - handler->surfaces; unsigned long index = surf - handler->surfaces;
int ret; int ret;
if (index >= XVMC_MAX_SURFACES) if( index >= XVMC_MAX_SURFACES )
return 0; return 0;
pthread_mutex_lock(&handler->mutex); pthread_mutex_lock(&handler->mutex);
ret = handler->surfValid[index]; ret = handler->surfValid[index];
...@@ -745,25 +745,27 @@ int checkXvMCCap( vout_thread_t *p_vout ) ...@@ -745,25 +745,27 @@ int checkXvMCCap( vout_thread_t *p_vout )
XFree(surfaceInfo); XFree(surfaceInfo);
/* /*
* Try to create a direct rendering context. This will fail if we are not * Try to create a direct rendering context. This will fail if we are not
* on the displaying computer or an indirect context is not available. * on the displaying computer or an indirect context is not available.
*/ */
XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display ); XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display );
curCap = p_vout->p_sys->xvmc_cap; curCap = p_vout->p_sys->xvmc_cap;
if( Success == XvMCCreateContext( p_vout->p_sys->p_display, i_xvport, if( Success == XvMCCreateContext( p_vout->p_sys->p_display, i_xvport,
curCap->type_id, curCap->type_id,
curCap->max_width, curCap->max_width,
curCap->max_height, curCap->max_height,
XVMC_DIRECT, &c) ) XVMC_DIRECT, &c ) )
{ {
p_vout->p_sys->context_flags = XVMC_DIRECT; msg_Dbg( p_vout, "using direct XVMC rendering context" );
p_vout->p_sys->context_flags = XVMC_DIRECT;
} }
else if( Success == XvMCCreateContext( p_vout->p_sys->p_display, i_xvport, else if( Success == XvMCCreateContext( p_vout->p_sys->p_display, i_xvport,
curCap->type_id, curCap->type_id,
curCap->max_width, curCap->max_width,
curCap->max_height, curCap->max_height,
0, &c) ) 0, &c ) )
{ {
msg_Dbg( p_vout, "using default XVMC rendering context" );
p_vout->p_sys->context_flags = 0; p_vout->p_sys->context_flags = 0;
} }
else else
...@@ -778,7 +780,7 @@ int checkXvMCCap( vout_thread_t *p_vout ) ...@@ -778,7 +780,7 @@ int checkXvMCCap( vout_thread_t *p_vout )
} }
XVMCLOCKDISPLAY( p_vout->p_sys->p_display ); XVMCLOCKDISPLAY( p_vout->p_sys->p_display );
XvMCDestroyContext( p_vout->p_sys->p_display, &c ); XvMCDestroyContext( p_vout->p_sys->p_display, &c );
xxmc_xvmc_surface_handler_construct(p_vout ); xxmc_xvmc_surface_handler_construct( p_vout );
/* p_vout->p_sys->capabilities |= VO_CAP_XXMC; */ /* p_vout->p_sys->capabilities |= VO_CAP_XXMC; */
XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display ); XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display );
init_xx44_palette( &p_vout->p_sys->palette , 0 ); init_xx44_palette( &p_vout->p_sys->palette , 0 );
...@@ -960,6 +962,7 @@ static XvMCSurface *xxmc_xvmc_alloc_surface( vout_thread_t *p_vout, ...@@ -960,6 +962,7 @@ static XvMCSurface *xxmc_xvmc_alloc_surface( vout_thread_t *p_vout,
if( handler->surfValid[i] && !handler->surfInUse[i] ) if( handler->surfValid[i] && !handler->surfInUse[i] )
{ {
handler->surfInUse[i] = 1; handler->surfInUse[i] = 1;
msg_Dbg( p_vout, "reusing surface %d", i );
xxmc_xvmc_dump_surfaces( p_vout ); xxmc_xvmc_dump_surfaces( p_vout );
pthread_mutex_unlock( &handler->mutex ); pthread_mutex_unlock( &handler->mutex );
return (handler->surfaces + i); return (handler->surfaces + i);
...@@ -1117,7 +1120,8 @@ static void xvmc_flushsync(picture_t *picture) ...@@ -1117,7 +1120,8 @@ static void xvmc_flushsync(picture_t *picture)
xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock ); xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
if( ! xxmc_xvmc_surface_valid( p_vout, picture->p_sys->xvmc_surf)) { if( !xxmc_xvmc_surface_valid( p_vout, picture->p_sys->xvmc_surf ) )
{
msg_Dbg(p_vout, "xvmc_flushsync 1 : %d", picture->p_sys->xxmc_data.result ); msg_Dbg(p_vout, "xvmc_flushsync 1 : %d", picture->p_sys->xxmc_data.result );
picture->p_sys->xxmc_data.result = 128; picture->p_sys->xxmc_data.result = 128;
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock ); xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
...@@ -1396,7 +1400,7 @@ void xvmc_vld_frame( picture_t *picture ) ...@@ -1396,7 +1400,7 @@ void xvmc_vld_frame( picture_t *picture )
qmx.load_chroma_non_intra_quantiser_matrix = 0; qmx.load_chroma_non_intra_quantiser_matrix = 0;
xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock ); xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );
if( ! xxmc_xvmc_surface_valid( p_vout, picture->p_sys->xvmc_surf) ) if( !xxmc_xvmc_surface_valid( p_vout, picture->p_sys->xvmc_surf ) )
{ {
picture->p_sys->xxmc_data.result = 128; picture->p_sys->xxmc_data.result = 128;
xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock ); xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment