wavpack: skip blocks with no samples

These blocks don't report audio stream parameters and they are not needed
for decoding.

Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit cb7b55b096)

Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:
Kostya Shishkov 2011-06-28 11:49:32 +02:00 committed by Reinhard Tartler
parent 87eedf6943
commit 9482dd0d17
1 changed files with 11 additions and 2 deletions

View File

@ -110,6 +110,9 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb, int appen
size = wc->blksize;
}
wc->flags = AV_RL32(wc->extra + 4);
// blocks with zero samples don't contain actual audio information and should be ignored
if (!AV_RN32(wc->extra))
return 0;
//parse flags
bpp = ((wc->flags & 3) + 1) << 3;
chan = 1 + !(wc->flags & WV_MONO);
@ -207,8 +210,14 @@ static int wv_read_header(AVFormatContext *s,
AVStream *st;
wc->block_parsed = 0;
if(wv_read_block_header(s, pb, 0) < 0)
return -1;
for(;;){
if(wv_read_block_header(s, pb, 0) < 0)
return -1;
if(!AV_RN32(wc->extra))
avio_skip(pb, wc->blksize - 24);
else
break;
}
/* now we are ready: build format streams */
st = av_new_stream(s, 0);