summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBastien Nocera <hadess@users.sourceforge.net>2004-01-04 11:59:33 +0000
committerBastien Nocera <hadess@users.sourceforge.net>2004-01-04 11:59:33 +0000
commit2fbb65bdd67ec800faa0fd8f9ff65cc80ff016c4 (patch)
tree4a4a3ee6be77a4d88d95b2aa35f16d45ca2abfce /src
parent15b9b21663f6d085550fa17a776b6add8c490036 (diff)
downloadxine-lib-2fbb65bdd67ec800faa0fd8f9ff65cc80ff016c4.tar.gz
xine-lib-2fbb65bdd67ec800faa0fd8f9ff65cc80ff016c4.tar.bz2
- skip the ultravox metadata headers (gets us further in playing back winamp.com videos)
CVS patchset: 5988 CVS date: 2004/01/04 11:59:33
Diffstat (limited to 'src')
-rw-r--r--src/demuxers/demux_nsv.c40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/demuxers/demux_nsv.c b/src/demuxers/demux_nsv.c
index 9a62e342a..88875be98 100644
--- a/src/demuxers/demux_nsv.c
+++ b/src/demuxers/demux_nsv.c
@@ -23,7 +23,7 @@
* For more information regarding the NSV file format, visit:
* http://www.pcisys.net/~melanson/codecs/
*
- * $Id: demux_nsv.c,v 1.11 2003/11/26 19:43:30 f1rmb Exp $
+ * $Id: demux_nsv.c,v 1.12 2004/01/04 11:59:33 hadess Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -86,6 +86,8 @@ static int open_nsv_file(demux_nsv_t *this) {
unsigned char preview[28];
unsigned int video_fourcc;
unsigned int audio_fourcc;
+ int is_ultravox = 0;
+ unsigned int offset = 0;
if (_x_demux_read_header(this->input, preview, 4) != 4)
return 0;
@@ -94,15 +96,43 @@ static int open_nsv_file(demux_nsv_t *this) {
if ((preview[0] != 'N') ||
(preview[1] != 'S') ||
(preview[2] != 'V'))
- return 0;
+ {
+ if ((preview[0] != 'Z') ||
+ (preview[1] != 0) ||
+ (preview[2] != '9') ||
+ (preview[3] != 1))
+ return 0;
+
+ is_ultravox = 1;
+ }
lprintf("NSV file detected\n");
- /* file is qualified, proceed to load; jump over the first 4 bytes */
- this->input->seek(this->input, 4, SEEK_SET);
-
this->data_size = this->input->get_length(this->input);
+ if (is_ultravox == 1) {
+ int i;
+ unsigned char buffer[512];
+
+ if (_x_demux_read_header(this->input, buffer, 512) != 512)
+ return 0;
+
+ for (i = 0; i < 512 - 3; i++)
+ {
+ if ((buffer[i] == 'N') &&
+ (buffer[i+1] == 'S') &&
+ (buffer[i+2] == 'V')) {
+ /* Fill the preview buffer with our nice new NSV tag */
+ memcpy (preview, buffer + i, 4);
+ offset = i;
+ break;
+ }
+ }
+ }
+
+ /* file is qualified, proceed to load; jump over the first 4 bytes */
+ this->input->seek(this->input, 4 + offset, SEEK_SET);
+
if (BE_32(&preview[0]) == NSVf_TAG) {
/* if there is a NSVs tag, load 24 more header bytes; load starting at