[-]
[+]
|
Changed |
xine-lib.spec
|
|
[-]
[+]
|
Added |
vdr-xine-lib-0.8.2.diff
^
|
@@ -0,0 +1,4486 @@
+diff -uNr xine-lib.orig/configure.ac xine-lib/configure.ac
+--- xine-lib.orig/configure.ac 2008-03-04 20:22:53.000000000 +0100
++++ xine-lib/configure.ac 2008-03-11 19:40:02.000000000 +0100
+@@ -2749,6 +2749,7 @@
+ src/video_out/vidix/drivers/Makefile
+ src/xine-utils/Makefile
+ src/xine-engine/Makefile
++src/vdr/Makefile
+ win32/Makefile
+ win32/include/Makefile])
+ AC_CONFIG_COMMANDS([default],[[chmod +x ./misc/SlackBuild ./misc/build_rpms.sh ./misc/relchk.sh]],[[]])
+@@ -2791,7 +2792,7 @@
+ echo " - stdin_fifo - rtp"
+ echo " - http - mms"
+ echo " - pnm - rtsp"
+-echo " - dvb"
++echo " - dvb - vdr"
+ if test "x$external_dvdnav" = "xyes"; then
+ echo " - dvd (external libs)"
+ else
+@@ -2996,6 +2997,7 @@
+ echo " - eq - eq2"
+ echo " - boxblur - denoise3d"
+ echo " - unsharp - tvtime"
++echo " - vdr"
+ echo " * SFX:"
+ echo " - goom - oscope"
+ echo " - fftscope - mosaico"
+diff -uNr xine-lib.orig/src/Makefile.am xine-lib/src/Makefile.am
+--- xine-lib.orig/src/Makefile.am 2007-04-17 20:46:41.000000000 +0200
++++ xine-lib/src/Makefile.am 2008-03-11 19:40:02.000000000 +0100
+@@ -26,4 +26,5 @@
+ libfaad \
+ libmusepack \
+ post \
+- combined
++ combined \
++ vdr
+diff -uNr xine-lib.orig/src/vdr/combined_vdr.c xine-lib/src/vdr/combined_vdr.c
+--- xine-lib.orig/src/vdr/combined_vdr.c 1970-01-01 01:00:00.000000000 +0100
++++ xine-lib/src/vdr/combined_vdr.c 2008-03-11 19:40:02.000000000 +0100
+@@ -0,0 +1,44 @@
++/*
++ * Copyright (C) 2000-2004 the xine project
++ *
++ * This file is part of xine, a free video player.
++ *
++ * xine 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.
++ *
++ * xine 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, USA
++ */
++
++/*
++ * plugins for VDR
++ */
++
++#include "xine_internal.h"
++#include "post.h"
++#include "combined_vdr.h"
++
++
++
++static const post_info_t vdr_video_special_info = { XINE_POST_TYPE_VIDEO_FILTER };
++static const post_info_t vdr_audio_special_info = { XINE_POST_TYPE_AUDIO_FILTER };
++
++/* exported plugin catalog entry */
++const plugin_info_t xine_plugin_info[] EXPORTED =
++{
++ /* type , API, "name" , version , special_info , init_function */
++ { PLUGIN_INPUT, 17, "VDR" , XINE_VERSION_CODE, NULL , &vdr_input_init_plugin },
++ { PLUGIN_POST , 9, "vdr" , XINE_VERSION_CODE, &vdr_video_special_info, &vdr_video_init_plugin },
++ { PLUGIN_POST , 9, "vdr_video", XINE_VERSION_CODE, &vdr_video_special_info, &vdr_video_init_plugin },
++ { PLUGIN_POST , 9, "vdr_audio", XINE_VERSION_CODE, &vdr_audio_special_info, &vdr_audio_init_plugin },
++ { PLUGIN_NONE , 0, "" , 0 , NULL , NULL }
++};
++
+diff -uNr xine-lib.orig/src/vdr/combined_vdr.h xine-lib/src/vdr/combined_vdr.h
+--- xine-lib.orig/src/vdr/combined_vdr.h 1970-01-01 01:00:00.000000000 +0100
++++ xine-lib/src/vdr/combined_vdr.h 2008-03-11 19:40:02.000000000 +0100
+@@ -0,0 +1,92 @@
++/*
++ * Copyright (C) 2000-2004 the xine project
++ *
++ * This file is part of xine, a free video player.
++ *
++ * xine 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.
++ *
++ * xine 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, USA
++ */
++
++#ifndef __COMBINED_VDR_H
++#define __COMBINED_VDR_H
++
++
++
++typedef struct vdr_set_video_window_data_s {
++ int32_t x;
++ int32_t y;
++ int32_t w;
++ int32_t h;
++ int32_t w_ref;
++ int32_t h_ref;
++
++} vdr_set_video_window_data_t;
++
++
++
++typedef struct vdr_frame_size_changed_data_s {
++ int32_t x;
++ int32_t y;
++ int32_t w;
++ int32_t h;
++ double r;
++
++} vdr_frame_size_changed_data_t;
++
++
++
++typedef struct vdr_select_audio_data_s {
++ uint8_t channels;
++
++} vdr_select_audio_data_t;
++
++
++
++inline static int vdr_is_vdr_stream(xine_stream_t *stream)
++{
++ if (!stream
++ || !stream->input_plugin
++ || !stream->input_plugin->input_class)
++ {
++ return 0;
++ }
++
++ {
++ input_class_t *input_class = stream->input_plugin->input_class;
++
++ if (input_class->get_identifier)
++ {
++ const char *identifier = input_class->get_identifier(input_class);
++ if (identifier
++ && 0 == strcmp(identifier, "VDR"))
++ {
++ return 1;
++ }
++ }
++ }
++
++ return 0;
++}
++
++
++
++/* plugin class initialization function */
++void *vdr_input_init_plugin(xine_t *xine, void *data);
++void *vdr_video_init_plugin(xine_t *xine, void *data);
++void *vdr_audio_init_plugin(xine_t *xine, void *data);
++
++
++
++#endif /* __COMBINED_VDR_H */
++
+diff -uNr xine-lib.orig/src/vdr/input_vdr.c xine-lib/src/vdr/input_vdr.c
+--- xine-lib.orig/src/vdr/input_vdr.c 1970-01-01 01:00:00.000000000 +0100
++++ xine-lib/src/vdr/input_vdr.c 2008-03-11 19:41:31.000000000 +0100
+@@ -0,0 +1,2214 @@
++/*
++ * Copyright (C) 2003-2004 the xine project
++ *
++ * This file is part of xine, a free video player.
++ *
++ * xine 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.
++ *
++ * xine 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
|
[-]
[+]
|
Added |
xine-lib-fix-demuxers.diff
^
|
@@ -0,0 +1,64 @@
+diff -urN xine-lib-1.1.11.1.orig/src/demuxers/demux_matroska.c xine-lib-1.1.11.1/src/demuxers/demux_matroska.c
+--- xine-lib-1.1.11.1.orig/src/demuxers/demux_matroska.c 2008-03-28 15:24:50.000000000 +0100
++++ xine-lib-1.1.11.1/src/demuxers/demux_matroska.c 2008-04-08 19:28:32.000000000 +0200
+@@ -635,9 +635,7 @@
+ }
+ buf->size = frame[i];
+
+- buf->decoder_flags = BUF_FLAG_HEADER;
+- if (i == 2)
+- buf->decoder_flags |= BUF_FLAG_FRAME_END;
++ buf->decoder_flags = BUF_FLAG_HEADER | BUF_FLAG_FRAME_START | BUF_FLAG_FRAME_END;
+ buf->type = track->buf_type;
+ buf->pts = 0;
+
+@@ -2915,7 +2913,8 @@
+
+
+ static const char *get_mimetypes (demux_class_t *this_gen) {
+- return "video/mkv: mkv: matroska;";
++ return "video/mkv: mkv: matroska;"
++ "video/x-matroska: mkv: matroska;";
+ }
+
+
+diff -urN xine-lib-1.1.11.1.orig/src/demuxers/demux_ogg.c xine-lib-1.1.11.1/src/demuxers/demux_ogg.c
+--- xine-lib-1.1.11.1.orig/src/demuxers/demux_ogg.c 2008-03-28 15:24:50.000000000 +0100
++++ xine-lib-1.1.11.1/src/demuxers/demux_ogg.c 2008-04-07 19:36:55.000000000 +0200
+@@ -2166,6 +2166,9 @@
+ static const char *ogg_get_mimetypes (demux_class_t *this_gen) {
+ return "application/ogg: ogx: Ogg Stream;"
+ "application/x-ogg: ogx: Ogg Stream;"
++ "application/x-ogm: ogx: Ogg Stream;"
++ "application/x-ogm-audio: oga: Ogg Audio;"
++ "application/x-ogm-video: ogv: Ogg Video;"
+ "audio/ogg: oga: Ogg Audio;"
+ "audio/x-ogg: oga: Ogg Audio;"
+ "video/ogg: ogv: Ogg Video;"
+diff -urN xine-lib-1.1.11.1.orig/src/demuxers/demux_qt.c xine-lib-1.1.11.1/src/demuxers/demux_qt.c
+--- xine-lib-1.1.11.1.orig/src/demuxers/demux_qt.c 2008-03-28 23:50:47.000000000 +0100
++++ xine-lib-1.1.11.1/src/demuxers/demux_qt.c 2008-04-01 20:08:55.000000000 +0200
+@@ -896,11 +896,6 @@
+ current_atom_size = _X_BE_32(&trak_atom[i - 4]);
+ current_atom = _X_BE_32(&trak_atom[i]);
+
+- if (current_atom_size > trak_atom_size - i) {
+- last_error = QT_NOT_A_VALID_FILE;
+- goto free_trak;
+- }
+-
+ if (current_atom == TKHD_ATOM) {
+ trak->flags = _X_BE_16(&trak_atom[i + 6]);
+ } else if (current_atom == ELST_ATOM) {
+diff -urN xine-lib-1.1.11.1.orig/src/demuxers/ebml.c xine-lib-1.1.11.1/src/demuxers/ebml.c
+--- xine-lib-1.1.11.1.orig/src/demuxers/ebml.c 2008-03-28 15:24:50.000000000 +0100
++++ xine-lib-1.1.11.1/src/demuxers/ebml.c 2008-04-06 00:38:26.000000000 +0200
+@@ -327,7 +327,7 @@
+ if (text)
+ {
+ text[elem->len] = '\0';
+- if (ebml_read_ascii (ebml, &elem, text))
++ if (ebml_read_ascii (ebml, elem, text))
+ return text;
+ free (text);
+ }
|
[-]
[+]
|
Changed |
xine-lib-libdvdread_udf.diff
^
|
@@ -1,8 +1,14 @@
-Includes ifo patch from http://tobias.rautenkranz.ch/libdvdread_ifo.html which enables playback of Video-DVD's which are "protected" by bad blocks
-diff -ur a/src/input/libdvdnav/dvd_udf.c b/src/input/libdvdnav/dvd_udf.c
---- a/src/input/libdvdnav/dvd_udf.c 2007-08-19 01:36:46.000000000 +0200
-+++ b/src/input/libdvdnav/dvd_udf.c 2008-01-23 21:43:49.000000000 +0100
-@@ -38,10 +38,16 @@
+# HG changeset patch
+# User Tobias Rautenkranz <mail@tobias.rautenkranz.ch>
+# Date 1202208482 -3600
+# Node ID 100241ff36f0730a15018a58456fb86eb590bf18
+# Parent 07c29261ed98fdb710a241c6711dac0215b6074a
+Fix playback of DVDs with a broken UDF file system (aka DVD-Movie-Protect).
+
+diff -r 07c29261ed98 -r 100241ff36f0 src/input/libdvdnav/dvd_udf.c
+--- a/src/input/libdvdnav/dvd_udf.c Thu Jan 31 22:02:04 2008 +0000
++++ b/src/input/libdvdnav/dvd_udf.c Tue Feb 05 11:48:02 2008 +0100
+@@ -38,9 +38,15 @@
#include <sys/stat.h>
#include <unistd.h>
#include <inttypes.h>
@@ -12,88 +18,105 @@
#include "dvd_reader.h"
#include "dvd_udf.h"
-
++
+#include "ifo_types.h"
+#include "ifo_read.h"
-+
+
/* Private but located in/shared with dvd_reader.c */
extern int UDFReadBlocksRaw( dvd_reader_t *device, uint32_t lb_number,
- size_t block_count, unsigned char *data,
-@@ -777,6 +783,77 @@
- uint32_t UDFFindFile( dvd_reader_t *device, char *filename,
+@@ -774,7 +780,9 @@ static int UDFFindPartition( dvd_reader_
+ return part->valid;
+ }
+
+-uint32_t UDFFindFile( dvd_reader_t *device, char *filename,
++
++
++static uint32_t UDFFindFileReal( dvd_reader_t *device, char *filename,
uint32_t *filesize )
{
-+ uint32_t offset=0;
+ uint8_t LogBlock_base[ DVD_VIDEO_LB_LEN + 2048 ];
+@@ -856,6 +864,84 @@ uint32_t UDFFindFile( dvd_reader_t *devi
+ return partition.Start + File.Location;
+ }
+
++/**
++ * Get the offset from the ifo files to allow playback of DVDs
++ * with a deliberately broken UDF file system (aka DVD-Movie-Protect).
++ * When the file is not an IFO or VOB, it calls the real UDF routine.
++ */
++uint32_t UDFFindFile( dvd_reader_t *device, char *filename,
++ uint32_t *filesize )
++{
+#ifndef __WIN32__
-+ if (!fnmatch("/VIDEO_TS/VTS_[0-9][0-9]_[0-9].???", filename, FNM_PATHNAME)) {
++ if (!fnmatch("/VIDEO_TS/VTS_[0-9][0-9]_[0-9].???", filename, FNM_PATHNAME)) {
+#else
-+ if (strlen("/VIDEO_TS/VTS_01_1.VOB") == strlen(filename)
-+ && !strncmp(filename, "/VIDEO_TS/VTS_", strlen("/VIDEO_TS/VTS_")) ) {
++ if (strlen("/VIDEO_TS/VTS_01_1.VOB") == strlen(filename)
++ && !strncmp(filename, "/VIDEO_TS/VTS_", strlen("/VIDEO_TS/VTS_")) ) {
+#endif
-+ size_t len = strlen(filename);
-+ char *extension = &filename[len-3];
-+ if (!strcmp(extension, "IFO") || !strcmp(extension, "VOB")) {
-+ int title = atoi(&filename[len-8]);
-+ int part = atoi(&filename[len-5]);
-+
-+ ifo_handle_t *ifo_handle = ifoOpen(device, 0);
-+ if (0 == ifo_handle)
-+ return 0;
-+
-+ if (title > ifo_handle->tt_srpt->nr_of_srpts) {
-+ ifoClose(ifo_handle);
-+ return 0;
-+
-+ }
-+
-+ uint32_t tmp_filesize;
-+ offset += UDFFindFile(device, "/VIDEO_TS/VIDEO_TS.IFO", &tmp_filesize);
-+
-+
-+ int i;
-+ for (i=0; i<ifo_handle->tt_srpt->nr_of_srpts; i++)
-+ if (title == ifo_handle->tt_srpt->title[i].title_set_nr)
-+ break;
-+
-+ if (i == ifo_handle->tt_srpt->nr_of_srpts) {
-+ /* not found */
-+ ifoClose(ifo_handle);
-+ return 0;
-+ }
-+ offset += ifo_handle->tt_srpt->title[i].title_set_sector;
-+
-+ ifoClose(ifo_handle);
-+
-+ if (!strcmp(extension, "VOB")) {
-+ ifo_handle = ifoOpen(device, title);
-+ if (0 == ifo_handle)
-+ return 0;
-+
-+ switch(part) {
-+ case 0:
-+ if (0 == ifo_handle->vtsi_mat->vtsm_vobs)
-+ return 0;
-+ offset += ifo_handle->vtsi_mat->vtsm_vobs;
-+ break;
-+ case 1:
-+ if (0 == ifo_handle->vtsi_mat->vtstt_vobs)
-+ return 0;
-+ offset += ifo_handle->vtsi_mat->vtstt_vobs;
-+ break;
-+ default: /* can't get other parts (also no need to) */
-+ offset = 0;
-+ break;
-+ }
-+
-+ ifoClose(ifo_handle);
-+ }
-+
-+ }
-+
-+ *filesize = 1000000; /* File size unknown */
-+ if (offset != 0)
-+ return offset;
-+ }
- uint8_t LogBlock_base[ DVD_VIDEO_LB_LEN + 2048 ];
- uint8_t *LogBlock = (uint8_t *)(((uintptr_t)LogBlock_base & ~((uintptr_t)2047)) + 2048);
- uint32_t lbnum;
++ size_t len = strlen(filename);
++ char *extension = &filename[len-3];
++ if (!strcmp(extension, "IFO") || !strcmp(extension, "VOB")) {
++ int title = atoi(&filename[len-8]);
++ int part = atoi(&filename[len-5]);
++
++ ifo_handle_t *ifo_handle = ifoOpen(device, 0);
++ if (0 == ifo_handle)
++ return 0;
++
++ uint32_t tmp_filesize;
++ uint32_t offset = UDFFindFileReal(device, "/VIDEO_TS/VIDEO_TS.IFO", &tmp_filesize);
++
++ int i;
++ for (i=0; i<ifo_handle->tt_srpt->nr_of_srpts; i++)
++ if (title == ifo_handle->tt_srpt->title[i].title_set_nr)
++ break;
++
++ if (i == ifo_handle->tt_srpt->nr_of_srpts) {
++ /* not found */
++ ifoClose(ifo_handle);
++ return 0;
++ }
++ offset += ifo_handle->tt_srpt->title[i].title_set_sector;
++ ifoClose(ifo_handle);
++
++ if (!strcmp(extension, "VOB")) {
++ ifo_handle = ifoOpen(device, title);
++ if (0 == ifo_handle)
++ return 0;
++
++ switch(part) {
++ case 0:
++ if (0 == ifo_handle->vtsi_mat->vtsm_vobs) {
++ ifoClose(ifo_handle);
++ return 0;
++ }
++ offset += ifo_handle->vtsi_mat->vtsm_vobs;
++ break;
++ case 1:
++ if (0 == ifo_handle->vtsi_mat->vtstt_vobs) {
++ ifoClose(ifo_handle);
++ return 0;
++ }
++ offset += ifo_handle->vtsi_mat->vtstt_vobs;
++ break;
++ default: /* can't get other parts (also no need to) */
++ offset = 0;
++ break;
++ }
++
++ ifoClose(ifo_handle);
++ }
++
++
++ *filesize = 1000000; /* File size unknown */
++ if (offset != 0)
++ return offset;
++ }
++ }
++
++ return UDFFindFileReal( device, filename, filesize);
++}
++
+
|
[-]
[+]
|
Added |
xine-lib-pc.diff
^
|
@@ -0,0 +1,13 @@
+diff -ur xine-lib-1.1.10.orig/misc/libxine.pc.in xine-lib-1.1.10/misc/libxine.pc.in
+--- xine-lib-1.1.10.orig/misc/libxine.pc.in 2008-01-23 06:11:50.000000000 +0100
++++ xine-lib-1.1.10/misc/libxine.pc.in 2008-02-02 18:22:03.000000000 +0100
+@@ -3,8 +3,8 @@
+ libdir=@libdir@
+ includedir=@includedir@
+
+-datarootdir=@datarootdir@
+ datadir=@datadir@
++datarootdir=@datarootdir@
+
+ xinelibdir=@xinelibdir@
+ xinedatadir=@xinedatadir@
|