annotate libmpdemux/demux_nsv.c @ 35033:387485e3956a

vf_ass: Improve format query. The output format should always match the input format for this filter, and we should set the EOSD capability. This also simplifies adding support for more formats. Patch by Xidorn Quan [quanxunzhen gmail com].
author reimar
date Wed, 29 Aug 2012 16:06:26 +0000
parents beafae9de2be
children f3c835ddce85
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
34139
cc8dfde2b6c5 Fix off_t printf conversion specifiers and related warnings.
diego
parents: 32537
diff changeset
26 #include <inttypes.h>
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
27 #include <stdio.h>
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
28 #include <stdlib.h>
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
29 #include <unistd.h>
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
30
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
31 #include "config.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
32 #include "mp_msg.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
33 #include "help_mp.h"
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 20473
diff changeset
34 #include "stream/stream.h"
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
35 #include "demuxer.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
36 #include "stheader.h"
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
37
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
38 typedef struct {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
39 float v_pts;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
40 int video_pack_no;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
41 unsigned int a_format;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
42 unsigned int v_format;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
43 unsigned char fps;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
44 } nsv_priv_t;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
45
18251
fdb789f1a99a Increase HEADER_SEARCH_SIZE, fixes high-bitrate streams from demoscene.tv.
diego
parents: 17636
diff changeset
46 #define HEADER_SEARCH_SIZE 256000
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
47
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
48
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
49 /**
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
50 * Seeking still to be implemented
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
51 */
17636
b849a99cdc3c Second-try commit of this patch.
corey
parents: 17569
diff changeset
52 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
53 {
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
54 // seeking is not yet implemented
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
55 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
56
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
57
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
58 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
59 {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
60 unsigned char hdr[17];
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
61 // for the extra data
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
62 unsigned char aux[6];
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
63 int i_aux = 0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
64 // videolen = audio chunk length, audiolen = video chunk length
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
65 int videolen,audiolen;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
66
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
67 sh_video_t *sh_video = demuxer->video->sh;
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
68 sh_audio_t *sh_audio = demuxer->audio->sh;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
69
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
70 nsv_priv_t * priv = demuxer->priv;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
71
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
72 // 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
73 // or rather 0xEF 0xBE
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
74 stream_read(demuxer->stream,hdr,7);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
75 if(stream_eof(demuxer->stream)) return 0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
76 // sometimes instead of 0xBEEF as described for the next audio/video chunk we get
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
77 // a whole new header
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
78
34144
beafae9de2be Employ correct off_t printf conversion specifiers; this time without typos.
diego
parents: 34139
diff changeset
79 mp_dbg(MSGT_DEMUX, MSGL_DBG2, "demux_nsv: %08X %08"PRIX64"\n",
34139
cc8dfde2b6c5 Fix off_t printf conversion specifiers and related warnings.
diego
parents: 32537
diff changeset
80 hdr[0] << 8 | hdr[1], stream_tell(demuxer->stream));
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
81 switch(hdr[0]<<8|hdr[1]) {
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
82 case 0x4E53:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
83 if(hdr[2]==0x56 && hdr[3]==0x73){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
84 // NSVs
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
85 // get the header since there is no more metaheader after the first one
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
86 // there is no more need to skip that
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
87 stream_read(demuxer->stream,hdr+7,17-7);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
88 stream_read(demuxer->stream,hdr,7);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
89 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
90 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
91
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
92 case 0xEFBE:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
93 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
94
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
95 default:
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
96 mp_dbg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: sync lost\n");
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
97 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
98 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
99
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
100 if (sh_video)
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
101 sh_video->pts = priv->v_pts =demuxer->video->pts= priv->video_pack_no *
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
102 (float)sh_video->frametime;
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
103 else
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
104 priv->v_pts = priv->video_pack_no;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
105
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
106 demuxer->filepos=stream_tell(demuxer->stream);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
107
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
108
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
109 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
110 (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
111
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
112 // read video:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
113 videolen=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
114 //check if we got extra data like subtitles here
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
115 if( (hdr[2]&0x0f) != 0x0 ) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
116 stream_read( demuxer->stream, aux, 6);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
117
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
118 i_aux = aux[0]|aux[1]<<8;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
119 // We skip this extra data
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
120 stream_skip( demuxer->stream, i_aux );
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
121 i_aux+=6;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
122 videolen -= i_aux;
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
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
125
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
126 // we need to return an empty packet when the
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
127 // video frame is empty otherwise the stream will fasten up
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
128 if(sh_video) {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
129 if( (hdr[2]&0x0f) != 0x0 )
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
130 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
131 else
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
132 ds_read_packet(demuxer->video,demuxer->stream,videolen,priv->v_pts,demuxer->filepos,0);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
133 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
134 else
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
135 stream_skip(demuxer->stream,videolen);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
136
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
137 // read audio:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
138 audiolen=(hdr[5])|(hdr[6]<<8);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
139 // we need to return an empty packet when the
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
140 // audio frame is empty otherwise the stream will fasten up
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
141 if(sh_audio) {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
142 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
143 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
144 else
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
145 stream_skip(demuxer->stream,audiolen);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
146
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
147 ++priv->video_pack_no;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
148
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
149 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
150
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
151 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
152
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
153
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
154 static demuxer_t* demux_open_nsv ( demuxer_t* demuxer )
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
155 {
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
156 // 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
157 unsigned char hdr[17];
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
158 int videolen,audiolen;
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
159 unsigned char buf[10];
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
160 sh_video_t *sh_video = NULL;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
161 sh_audio_t *sh_audio = NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
162
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
163
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
164 nsv_priv_t * priv = malloc(sizeof(nsv_priv_t));
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
165 demuxer->priv=priv;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
166 priv->video_pack_no=0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
167
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
168 /* disable seeking yet to be fixed*/
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
169 demuxer->seekable = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
170
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
171 stream_read(demuxer->stream,hdr,4);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
172 if(stream_eof(demuxer->stream)) return 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
173
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
174 if(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
175 // NSV header!
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
176 if(hdr[3]==0x73){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
177 // NSVs
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
178 stream_read(demuxer->stream,hdr+4,17-4);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
179 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
180
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
181 if(hdr[3]==0x66){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
182 // NSVf
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
183 int len=stream_read_dword_le(demuxer->stream);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
184 // TODO: parse out metadata!!!!
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
185 stream_skip(demuxer->stream,len-8);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
186
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
187 // NSVs
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
188 stream_read(demuxer->stream,hdr,17);
20470
054516eecb9b Better check for non-broken NSVf-header to avoid incorrect detection.
reimar
parents: 18885
diff changeset
189 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
190 return 0;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
191 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
192
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
193 // dummy debug message
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
194 mp_msg(MSGT_DEMUX,MSGL_V,"demux_nsv: Header: %.12s\n",hdr);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
195
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
196 // bytes 8-11 audio codec fourcc
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
197 // 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
198 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
199 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
200 demuxer->audio->id = 0;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
201 demuxer->audio->sh = sh_audio;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
202 sh_audio->format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
203 sh_audio->ds = demuxer->audio;
12896
e60cf1255df2 Fix -nosound and -novideo (bug #28)
rtognimp
parents: 12277
diff changeset
204 priv->a_format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
205 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
206
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
207 // store hdr fps
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
208 priv->fps=hdr[16];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
209
12896
e60cf1255df2 Fix -nosound and -novideo (bug #28)
rtognimp
parents: 12277
diff changeset
210 if ((demuxer->video->id != -2) && strncmp(hdr+4,"NONE", 4)) {
12198
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
211 /* Create a new video stream header */
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
212 sh_video = new_sh_video ( demuxer, 0 );
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
213
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
214 /* Make sure the demuxer knows about the new video stream header
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
215 * (even though new_sh_video() ought to take care of it)
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 demuxer->video->sh = sh_video;
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
218
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
219 /* Make sure that the video demuxer stream header knows about its
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
220 * parent video demuxer stream (this is getting wacky), or else
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
221 * video_read_properties() will choke
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
222 */
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
223 sh_video->ds = demuxer->video;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
224
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
225 // bytes 4-7 video codec fourcc
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
226 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
227
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
228 // new video stream! parse header
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
229 sh_video->disp_w=hdr[12]|(hdr[13]<<8);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
230 sh_video->disp_h=hdr[14]|(hdr[15]<<8);
32105
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 31609
diff changeset
231 sh_video->bih=calloc(1,sizeof(*sh_video->bih));
c08363dc5320 Replace sizoef(type) by sizeof(*ptrvar).
reimar
parents: 31609
diff changeset
232 sh_video->bih->biSize=sizeof(*sh_video->bih);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
233 sh_video->bih->biPlanes=1;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
234 sh_video->bih->biBitCount=24;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
235 sh_video->bih->biWidth=hdr[12]|(hdr[13]<<8);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
236 sh_video->bih->biHeight=hdr[14]|(hdr[15]<<8);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
237 memcpy(&sh_video->bih->biCompression,hdr+4,4);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
238 sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
239
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
240 // here we search for the correct keyframe
12275
3bd70d9bebb7 Fix VP62 keyframe search
rtognimp
parents: 12272
diff changeset
241 // vp6 keyframe is when the 2nd byte of the vp6 header is
3bd70d9bebb7 Fix VP62 keyframe search
rtognimp
parents: 12272
diff changeset
242 // 0x36 for VP61 and 0x46 for VP62
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
243 if((priv->v_format==mmioFOURCC('V','P','6','1')) ||
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
244 (priv->v_format==mmioFOURCC('V','P','6','2')) ||
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
245 (priv->v_format==mmioFOURCC('V','P','3','1'))) {
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
246 stream_read(demuxer->stream,buf,10);
12277
ad3a4af318f2 More keyframe search fix for VP6x
rtognimp
parents: 12275
diff changeset
247 if (((((priv->v_format>>16) & 0xff) == '6') && ((buf[8]&0x0e)!=0x06)) ||
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
248 ((((priv->v_format>>16) & 0xff) == '3') && (buf[8]!=0x00 || buf[9]!=0x08))) {
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
249 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
250 while(((((priv->v_format>>16) & 0xff) == '6') && ((buf[8]&0x0e)!=0x06)) ||
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
251 ((((priv->v_format>>16) & 0xff) == '3') && (buf[8]!=0x00 || buf[9]!=0x08))){
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
252 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
253 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
254 audiolen=(buf[5])|(buf[6]<<8);
12272
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
255 stream_skip(demuxer->stream, videolen+audiolen-3);
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
256 stream_read(demuxer->stream,buf,10);
12277
ad3a4af318f2 More keyframe search fix for VP6x
rtognimp
parents: 12275
diff changeset
257 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
258 if(buf[0]==0x4E){
aeb377ccb110 Fix vp61 keyframe search (do not skip blocks if 1st frame is keyframe)
rtognimp
parents: 12175
diff changeset
259 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
260 stream_skip(demuxer->stream,7);
369073d0f143 Fix support for audio only streams
rtognimp
parents: 12198
diff changeset
261 stream_read(demuxer->stream,buf,10);
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
262 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
263 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
264 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
265
13299
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
266 // 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
267 // we seek 17 backwards
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
268 stream_skip(demuxer->stream,7);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
269 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
270
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
271 switch(priv->fps){
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
272 case 0x80:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
273 sh_video->fps=30;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
274 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
275 case 0x81:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
276 sh_video->fps=(float)30000.0/1001.0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
277 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
278 case 0x82:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
279 sh_video->fps=25;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
280 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
281 case 0x83:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
282 sh_video->fps=(float)24000.0/1001.0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
283 break;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
284 case 0x85:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
285 sh_video->fps=(float)15000.0/1001.0;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
286 break;
15991
3042ee91c7dd support 10000/1001 framerate
reimar
parents: 13299
diff changeset
287 case 0x89:
3042ee91c7dd support 10000/1001 framerate
reimar
parents: 13299
diff changeset
288 sh_video->fps=(float)10000.0/1001.0;
3042ee91c7dd support 10000/1001 framerate
reimar
parents: 13299
diff changeset
289 break;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
290 default:
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
291 sh_video->fps = (float)priv->fps;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
292 }
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
293 sh_video->frametime = (float)1.0 / (float)sh_video->fps;
12198
759b010d6c09 Do not crash on audio only streams
rtognimp
parents: 12181
diff changeset
294 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
295 }
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
296
13299
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
297 // seek to start of NSV header
6f8fe531dd73 avoid always skipping first junk with a "sync lost" message
reimar
parents: 12896
diff changeset
298 stream_seek(demuxer->stream,stream_tell(demuxer->stream)-17);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
299
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
300 return demuxer;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
301 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
302
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
303 static int nsv_check_file ( demuxer_t* demuxer )
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
304 {
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
305 uint32_t hdr = 0;
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
306 int i;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
307
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
308 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
309
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
310 for (i = 0; i < HEADER_SEARCH_SIZE; i++) {
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
311 uint8_t c = stream_read_char(demuxer->stream);
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
312 if (stream_eof(demuxer->stream))
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
313 return 0;
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
314 if (hdr == mmioFOURCC('s', 'V', 'S', 'N') ||
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
315 (hdr == mmioFOURCC('f', 'V', 'S', 'N') && !c)) {
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
316 stream_seek(demuxer->stream,stream_tell(demuxer->stream)-5);
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
317 return DEMUXER_TYPE_NSV;
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
318 }
20473
6ebbcbeae8c1 Cleanup/simplify nsv check_file function.
reimar
parents: 20470
diff changeset
319 hdr = (hdr << 8) | c;
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
320 }
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
321
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
322 return 0;
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
323 }
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
324
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
325 static void demux_close_nsv(demuxer_t* demuxer) {
12175
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
326 nsv_priv_t* priv = demuxer->priv;
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
327
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
328 free(priv);
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
329
da8e39bfe121 nsv (Nullsoft streaming video) demuxer
rtognimp
parents:
diff changeset
330 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
331
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
332
25707
d4fe6e23283e Make all demuxer_desc_t const, thus moving them to .rodata
reimar
parents: 22605
diff changeset
333 const demuxer_desc_t demuxer_desc_nsv = {
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
334 "NullsoftVideo demuxer",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
335 "nsv",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
336 "Nullsoft Streaming Video",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
337 "Reza Jelveh",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
338 "nsv and nsa streaming files",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
339 DEMUXER_TYPE_NSV,
16318
e27998eeb54a Fix nsv detection with new demuxer structure
rtognimp
parents: 16175
diff changeset
340 0, // safe but expensive autodetect
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
341 nsv_check_file,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
342 demux_nsv_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
343 demux_open_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
344 demux_close_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
345 demux_seek_nsv,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
346 NULL
6b86089c2edd Demuxer modularization
rtognimp
parents: 15991
diff changeset
347 };