annotate libmpdemux/demux_nsv.c @ 32676:db882cd69776

Do not #define _WIN32 on the command line for Cygwin. Newer Cygwin versions no longer do this and hopefully we should be able to survive without this hack as well. This change necessitates adapting two #ifdefs in the MPlayer codebase. It is committed untested as I do not have access to a Cygwin system.
author diego
date Thu, 06 Jan 2011 12:42:59 +0000
parents 8fa2f43cb760
children cc8dfde2b6c5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
1 /*
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
2 * Nullsoft Streaming Video demuxer
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
3 * copyright (c) 2004 by Reza Jelveh <reza.jelveh@tuhh.de>
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
4 * Based on A'rpis G2 work
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
5 *
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
6 * seeking and PCM audio not yet supported
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
7 * PCM needs extra audio chunk "miniheader" parsing
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
8 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
9 * This file is part of MPlayer.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
10 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
11 * MPlayer is free software; you can redistribute it and/or modify
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
12 * it under the terms of the GNU General Public License as published by
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
14 * (at your option) any later version.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
15 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
16 * MPlayer is distributed in the hope that it will be useful,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
19 * GNU General Public License for more details.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
20 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
21 * You should have received a copy of the GNU General Public License along
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
22 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 26295
diff changeset
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
24 */
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
25
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
26 #include <stdio.h>
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
27 #include <stdlib.h>
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
28 #include <unistd.h>
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
29
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
30 #include "config.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
31 #include "mp_msg.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
32 #include "help_mp.h"
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 20473
diff changeset
33 #include "stream/stream.h"
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
34 #include "demuxer.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
35 #include "stheader.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
36
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
37 typedef struct {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
38 float v_pts;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
39 int video_pack_no;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
40 unsigned int a_format;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
41 unsigned int v_format;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
42 unsigned char fps;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
43 } nsv_priv_t;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
44
18251
fdb789f1a99a Increase HEADER_SEARCH_SIZE, fixes high-bitrate streams from demoscene.tv.
diego
parents: 17636
diff changeset
45 #define HEADER_SEARCH_SIZE 256000
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
46
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
47
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
48 /**
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
49 * Seeking still to be implemented
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
50 */
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17569
diff changeset
51 static void demux_seek_nsv ( demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags )
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
52 {
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
53 // seeking is not yet implemented
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
54 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
55
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
56
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
57 static int demux_nsv_fill_buffer ( demuxer_t *demuxer, demux_stream_t *ds )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
58 {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
59 unsigned char hdr[17];
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
60 // for the extra data
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
61 unsigned char aux[6];
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
62 int i_aux = 0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
63 // videolen = audio chunk length, audiolen = video chunk length
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
64 int videolen,audiolen;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
65
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
66 sh_video_t *sh_video = demuxer->video->sh;
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
67 sh_audio_t *sh_audio = demuxer->audio->sh;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
68
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
69 nsv_priv_t * priv = demuxer->priv;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
70
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
71 // if the audio/video chunk has no new header the first 2 bytes will be discarded 0xBEEF
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
72 // or rather 0xEF 0xBE
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
73 stream_read(demuxer->stream,hdr,7);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
74 if(stream_eof(demuxer->stream)) return 0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
75 // sometimes instead of 0xBEEF as described for the next audio/video chunk we get
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
76 // a whole new header
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
77
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
78 mp_dbg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %08X %08X\n",hdr[0]<<8|hdr[1],stream_tell(demuxer->stream));
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
79 switch(hdr[0]<<8|hdr[1]) {
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
80 case 0x4E53:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
81 if(hdr[2]==0x56 && hdr[3]==0x73){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
82 // NSVs
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
83 // get the header since there is no more metaheader after the first one
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
84 // there is no more need to skip that
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
85 stream_read(demuxer->stream,hdr+7,17-7);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
86 stream_read(demuxer->stream,hdr,7);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
87 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
88 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
89
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
90 case 0xEFBE:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
91 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
92
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
93 default:
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
94 mp_dbg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: sync lost\n");
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
95 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
96 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
97
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
98 if (sh_video)
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
99 sh_video->pts = priv->v_pts =demuxer->video->pts= priv->video_pack_no *
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
100 (float)sh_video->frametime;
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
101 else
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
102 priv->v_pts = priv->video_pack_no;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
103
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
104 demuxer->filepos=stream_tell(demuxer->stream);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
105
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
106
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
107 mp_dbg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %08X: %02X %02X | %02X %02X %02X | %02X %02X \n",
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
108 (int)demuxer->filepos, hdr[0],hdr[1],hdr[2],hdr[3],hdr[4],hdr[5],hdr[6]);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
109
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
110 // read video:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
111 videolen=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
112 //check if we got extra data like subtitles here
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
113 if( (hdr[2]&0x0f) != 0x0 ) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
114 stream_read( demuxer->stream, aux, 6);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
115
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
116 i_aux = aux[0]|aux[1]<<8;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
117 // We skip this extra data
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
118 stream_skip( demuxer->stream, i_aux );
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
119 i_aux+=6;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
120 videolen -= i_aux;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
121 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
122
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
123
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
124 // we need to return an empty packet when the
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
125 // video frame is empty otherwise the stream will fasten up
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
126 if(sh_video) {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
127 if( (hdr[2]&0x0f) != 0x0 )
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
128 ds_read_packet(demuxer->video,demuxer->stream,videolen,priv->v_pts,demuxer->filepos-i_aux,0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
129 else
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
130 ds_read_packet(demuxer->video,demuxer->stream,videolen,priv->v_pts,demuxer->filepos,0);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
131 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
132 else
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
133 stream_skip(demuxer->stream,videolen);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
134
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
135 // read audio:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
136 audiolen=(hdr[5])|(hdr[6]<<8);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
137 // we need to return an empty packet when the
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
138 // audio frame is empty otherwise the stream will fasten up
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
139 if(sh_audio) {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
140 ds_read_packet(demuxer->audio,demuxer->stream,audiolen,priv->v_pts,demuxer->filepos+videolen,0);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
141 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
142 else
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
143 stream_skip(demuxer->stream,audiolen);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
144
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
145 ++priv->video_pack_no;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
146
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
147 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
148
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
149 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
150
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
151
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
152 static demuxer_t* demux_open_nsv ( demuxer_t* demuxer )
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
153 {
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
154 // last 2 bytes 17 and 18 are unknown but right after that comes the length
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
155 unsigned char hdr[17];
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
156 int videolen,audiolen;
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
157 unsigned char buf[10];
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
158 sh_video_t *sh_video = NULL;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
159 sh_audio_t *sh_audio = NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
160
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
161
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
162 nsv_priv_t * priv = malloc(sizeof(nsv_priv_t));
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
163 demuxer->priv=priv;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
164 priv->video_pack_no=0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
165
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
166 /* disable seeking yet to be fixed*/
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
167 demuxer->seekable = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
168
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
169 stream_read(demuxer->stream,hdr,4);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
170 if(stream_eof(demuxer->stream)) return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
171
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
172 if(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
173 // NSV header!
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
174 if(hdr[3]==0x73){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
175 // NSVs
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
176 stream_read(demuxer->stream,hdr+4,17-4);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
177 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
178
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
179 if(hdr[3]==0x66){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
180 // NSVf
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
181 int len=stream_read_dword_le(demuxer->stream);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
182 // TODO: parse out metadata!!!!
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
183 stream_skip(demuxer->stream,len-8);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
184
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
185 // NSVs
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
186 stream_read(demuxer->stream,hdr,17);
20470
054516eecb9b Better check for non-broken NSVf-header to avoid incorrect detection.
reimar
parents: 18885
diff changeset
187 if (stream_eof(demuxer->stream) || strncmp(hdr, "NSVs", 4))
054516eecb9b Better check for non-broken NSVf-header to avoid incorrect detection.
reimar
parents: 18885
diff changeset
188 return 0;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
189 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
190
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
191 // dummy debug message
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
192 mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: Header: %.12s\n",hdr);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
193
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
194 // bytes 8-11 audio codec fourcc
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
195 // PCM fourcc needs extra parsing for every audio chunk, yet to implement
12896
e60cf1255df2 Fix -nosound and -novideo (bug #28)
rtognimp
parents: 12277
diff changeset
196 if((demuxer->audio->id != -2) && strncmp(hdr+8,"NONE", 4)){//&&strncmp(hdr+8,"VLB ", 4)){
31609
cd81fce1f010 Make the stream language an argument to the stream creation function
reimar
parents: 29263
diff changeset
197 sh_audio = new_sh_audio ( demuxer, 0, NULL );
26295
c8a489c8cae8 Set demuxer->audio->id to avoid breakage due to r26301
reimar
parents: 25707
diff changeset
198 demuxer->audio->id = 0;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
199 demuxer->audio->sh = sh_audio;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
200 sh_audio->format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
201 sh_audio->ds = demuxer->audio;
12896
e60cf1255df2 Fix -nosound and -novideo (bug #28)
rtognimp
parents: 12277
diff changeset
202 priv->a_format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
203 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
204
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
205 // store hdr fps
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
206 priv->fps=hdr[16];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
207
12896
e60cf1255df2 Fix -nosound and -novideo (bug #28)
rtognimp
parents: 12277
diff changeset
208 if ((demuxer->video->id != -2) && strncmp(hdr+4,"NONE", 4)) {
12198
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
209 /* Create a new video stream header */
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
210 sh_video = new_sh_video ( demuxer, 0 );
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
211
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
212 /* Make sure the demuxer knows about the new video stream header
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
213 * (even though new_sh_video() ought to take care of it)
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
214 */
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
215 demuxer->video->sh = sh_video;
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
216
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
217 /* Make sure that the video demuxer stream header knows about its
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
218 * parent video demuxer stream (this is getting wacky), or else
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
219 * video_read_properties() will choke
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
220 */
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
221 sh_video->ds = demuxer->video;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
222
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
223 // bytes 4-7 video codec fourcc
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
224 priv->v_format = sh_video->format=mmioFOURCC(hdr[4],hdr[5],hdr[6],hdr[7]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
225
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
226 // new video stream! parse header
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
227 sh_video->disp_w=hdr[12]|(hdr[13]<<8);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
228 sh_video->disp_h=hdr[14]|(hdr[15]<<8);
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 31609
diff changeset
229 sh_video->bih=calloc(1,sizeof(*sh_video->bih));
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 31609
diff changeset
230 sh_video->bih->biSize=sizeof(*sh_video->bih);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
231 sh_video->bih->biPlanes=1;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
232 sh_video->bih->biBitCount=24;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
233 sh_video->bih->biWidth=hdr[12]|(hdr[13]<<8);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
234 sh_video->bih->biHeight=hdr[14]|(hdr[15]<<8);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
235 memcpy(&sh_video->bih->biCompression,hdr+4,4);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
236 sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
237
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
238 // here we search for the correct keyframe
12275
3bd70d9bebb7 Fix VP62 keyframe search
rtognimp
parents: 12272
diff changeset
239 // vp6 keyframe is when the 2nd byte of the vp6 header is
3bd70d9bebb7 Fix VP62 keyframe search
rtognimp
parents: 12272
diff changeset
240 // 0x36 for VP61 and 0x46 for VP62
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
241 if((priv->v_format==mmioFOURCC('V','P','6','1')) ||
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
242 (priv->v_format==mmioFOURCC('V','P','6','2')) ||
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
243 (priv->v_format==mmioFOURCC('V','P','3','1'))) {
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
244 stream_read(demuxer->stream,buf,10);
12277
ad3a4af318f2 More keyframe search fix for VP6x
rtognimp
parents: 12275
diff changeset
245 if (((((priv->v_format>>16) & 0xff) == '6') && ((buf[8]&0x0e)!=0x06)) ||
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
246 ((((priv->v_format>>16) & 0xff) == '3') && (buf[8]!=0x00 || buf[9]!=0x08))) {
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
247 mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: searching %.4s keyframe...\n", (char*)&priv->v_format);
12277
ad3a4af318f2 More keyframe search fix for VP6x
rtognimp
parents: 12275
diff changeset
248 while(((((priv->v_format>>16) & 0xff) == '6') && ((buf[8]&0x0e)!=0x06)) ||
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
249 ((((priv->v_format>>16) & 0xff) == '3') && (buf[8]!=0x00 || buf[9]!=0x08))){
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
250 mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %.4s block skip.\n", (char*)&priv->v_format);
12179
aeb377ccb110 Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
rtognimp
parents: 12175
diff changeset
251 videolen=(buf[2]>>4)|(buf[3]<<4)|(buf[4]<<0xC);
aeb377ccb110 Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
rtognimp
parents: 12175
diff changeset
252 audiolen=(buf[5])|(buf[6]<<8);
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
253 stream_skip(demuxer->stream, videolen+audiolen-3);
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
254 stream_read(demuxer->stream,buf,10);
12277
ad3a4af318f2 More keyframe search fix for VP6x
rtognimp
parents: 12275
diff changeset
255 if(stream_eof(demuxer->stream)) return 0;
12179
aeb377ccb110 Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
rtognimp
parents: 12175
diff changeset
256 if(buf[0]==0x4E){
aeb377ccb110 Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
rtognimp
parents: 12175
diff changeset
257 mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: Got NSVs block.\n");
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
258 stream_skip(demuxer->stream,7);
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
259 stream_read(demuxer->stream,buf,10);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
260 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
261 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
262 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
263
13299
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
264 // data starts 10 bytes before current pos but later
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
265 // we seek 17 backwards
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
266 stream_skip(demuxer->stream,7);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
267 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
268
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
269 switch(priv->fps){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
270 case 0x80:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
271 sh_video->fps=30;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
272 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
273 case 0x81:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
274 sh_video->fps=(float)30000.0/1001.0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
275 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
276 case 0x82:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
277 sh_video->fps=25;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
278 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
279 case 0x83:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
280 sh_video->fps=(float)24000.0/1001.0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
281 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
282 case 0x85:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
283 sh_video->fps=(float)15000.0/1001.0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
284 break;
15991
3042ee91c7dd support 10000/1001 framerate
reimar
parents: 13299
diff changeset
285 case 0x89:
3042ee91c7dd support 10000/1001 framerate
reimar
parents: 13299
diff changeset
286 sh_video->fps=(float)10000.0/1001.0;
3042ee91c7dd support 10000/1001 framerate
reimar
parents: 13299
diff changeset
287 break;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
288 default:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
289 sh_video->fps = (float)priv->fps;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
290 }
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
291 sh_video->frametime = (float)1.0 / (float)sh_video->fps;
12198
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
292 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
293 }
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
294
13299
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
295 // seek to start of NSV header
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
296 stream_seek(demuxer->stream,stream_tell(demuxer->stream)-17);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
297
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
298 return demuxer;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
299 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
300
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
301 static int nsv_check_file ( demuxer_t* demuxer )
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
302 {
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
303 uint32_t hdr = 0;
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
304 int i;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
305
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
306 mp_msg ( MSGT_DEMUX, MSGL_V, "Checking for Nullsoft Streaming Video\n" );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
307
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
308 for (i = 0; i < HEADER_SEARCH_SIZE; i++) {
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
309 uint8_t c = stream_read_char(demuxer->stream);
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
310 if (stream_eof(demuxer->stream))
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
311 return 0;
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
312 if (hdr == mmioFOURCC('s', 'V', 'S', 'N') ||
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
313 (hdr == mmioFOURCC('f', 'V', 'S', 'N') && !c)) {
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
314 stream_seek(demuxer->stream,stream_tell(demuxer->stream)-5);
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
315 return DEMUXER_TYPE_NSV;
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
316 }
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
317 hdr = (hdr << 8) | c;
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
318 }
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
319
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
320 return 0;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
321 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
322
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
323 static void demux_close_nsv(demuxer_t* demuxer) {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
324 nsv_priv_t* priv = demuxer->priv;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
325
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
326 free(priv);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
327
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
328 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
329
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
330
25707
d4fe6e23283e Make all demuxer_desc_t const, thus moving them to .rodata
reimar
parents: 22605
diff changeset
331 const demuxer_desc_t demuxer_desc_nsv = {
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
332 "NullsoftVideo demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
333 "nsv",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
334 "Nullsoft Streaming Video",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
335 "Reza Jelveh",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
336 "nsv and nsa streaming files",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
337 DEMUXER_TYPE_NSV,
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
338 0, // safe but expensive autodetect
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
339 nsv_check_file,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
340 demux_nsv_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
341 demux_open_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
342 demux_close_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
343 demux_seek_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
344 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
345 };