Mercurial > mplayer.hg
comparison libmpdemux/demux_audio.c @ 9596:7b4a17c415fb
Same behaviour as old code for short headers
author | rtognimp |
---|---|
date | Sat, 15 Mar 2003 19:40:52 +0000 |
parents | 3904b95fce8f |
children | a6bbab17a87f |
comparison
equal
deleted
inserted
replaced
9595:6bf482d797b1 | 9596:7b4a17c415fb |
---|---|
156 unsigned int chunk_type; | 156 unsigned int chunk_type; |
157 unsigned int chunk_size; | 157 unsigned int chunk_size; |
158 WAVEFORMATEX* w; | 158 WAVEFORMATEX* w; |
159 int l; | 159 int l; |
160 l = stream_read_dword_le(s); | 160 l = stream_read_dword_le(s); |
161 if(l < sizeof(WAVEFORMATEX)) { | 161 if(l < 16) { |
162 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] Bad wav header length: too short (%d)!!!\n",l); | 162 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] Bad wav header length: too short (%d)!!!\n",l); |
163 free_sh_audio(sh_audio); | 163 free_sh_audio(sh_audio); |
164 return 0; | 164 return 0; |
165 } | 165 } |
166 sh_audio->wf = w = (WAVEFORMATEX*)malloc(l); | 166 sh_audio->wf = w = (WAVEFORMATEX*)malloc(l); |
168 w->nChannels = sh_audio->channels = stream_read_word_le(s); | 168 w->nChannels = sh_audio->channels = stream_read_word_le(s); |
169 w->nSamplesPerSec = sh_audio->samplerate = stream_read_dword_le(s); | 169 w->nSamplesPerSec = sh_audio->samplerate = stream_read_dword_le(s); |
170 w->nAvgBytesPerSec = stream_read_dword_le(s); | 170 w->nAvgBytesPerSec = stream_read_dword_le(s); |
171 w->nBlockAlign = stream_read_word_le(s); | 171 w->nBlockAlign = stream_read_word_le(s); |
172 w->wBitsPerSample = sh_audio->samplesize = stream_read_word_le(s); | 172 w->wBitsPerSample = sh_audio->samplesize = stream_read_word_le(s); |
173 l -= 16; | |
174 if (l > 0) { | |
173 w->cbSize = stream_read_word_le(s); | 175 w->cbSize = stream_read_word_le(s); |
174 l -= sizeof(WAVEFORMATEX); | 176 l -= 2; |
175 if (w->cbSize > 0) | 177 if (w->cbSize > 0) |
176 if (l < w->cbSize) { | 178 if (l < w->cbSize) { |
177 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] truncated extradata (%d < %d)\n", | 179 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] truncated extradata (%d < %d)\n", |
178 l,w->cbSize); | 180 l,w->cbSize); |
179 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),l); | 181 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),l); |
180 l = 0; | 182 l = 0; |
181 } else { | 183 } else { |
182 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),w->cbSize); | 184 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),w->cbSize); |
183 l -= w->cbSize; | 185 l -= w->cbSize; |
184 } | 186 } |
187 } | |
185 | 188 |
186 if(verbose>0) print_wave_header(w); | 189 if(verbose>0) print_wave_header(w); |
187 if(l) | 190 if(l) |
188 stream_skip(s,l); | 191 stream_skip(s,l); |
189 do | 192 do |