Mercurial > mplayer.hg
changeset 9169:f49a2bf04229
- fixed the input buffering (don't read input unless we're already processed
all decoded samples)
- fix 100l bug: uninitialized ogg_packet structure caused tremor to hang
author | arpi |
---|---|
date | Wed, 29 Jan 2003 22:45:07 +0000 |
parents | 3081f6796183 |
children | bcf4bf10f9c7 |
files | libmpcodecs/ad_libvorbis.c |
diffstat | 1 files changed, 15 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/ad_libvorbis.c Wed Jan 29 22:37:39 2003 +0000 +++ b/libmpcodecs/ad_libvorbis.c Wed Jan 29 22:45:07 2003 +0000 @@ -188,22 +188,24 @@ int samples; float **pcm; float scale; - ogg_packet op; struct ov_struct_st *ov = sh->context; - op.b_o_s = op.e_o_s = 0; while(len < minlen) { - op.bytes = ds_get_packet(sh->ds,&op.packet); - if(!op.packet) - break; - if(vorbis_synthesis(&ov->vb,&op)==0) /* test for success! */ - vorbis_synthesis_blockin(&ov->vd,&ov->vb); - while((samples=vorbis_synthesis_pcmout(&ov->vd,&pcm))>0){ + while((samples=vorbis_synthesis_pcmout(&ov->vd,&pcm))<=0){ + ogg_packet op; + memset(&op,0,sizeof(op)); //op.b_o_s = op.e_o_s = 0; + op.bytes = ds_get_packet(sh->ds,&op.packet); + if(op.bytes<=0) break; + if(vorbis_synthesis(&ov->vb,&op)==0) /* test for success! */ + vorbis_synthesis_blockin(&ov->vd,&ov->vb); + } + if(samples<=0) break; // error/EOF + while(samples>0){ int i,j; int clipflag=0; int convsize=(maxlen-len)/(2*ov->vi.channels); // max size! - int bout=(samples<convsize?samples:convsize); + int bout=((samples<convsize)?samples:convsize); - if(bout<=0) break; + if(bout<=0) break; // no buffer space /* convert floats to 16 bit signed ints (host order) and interleave */ @@ -265,10 +267,12 @@ mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"Clipping in frame %ld\n",(long)(ov->vd.sequence)); len+=2*ov->vi.channels*bout; mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"\n[decoded: %d / %d ]\n",bout,samples); + samples-=bout; vorbis_synthesis_read(&ov->vd,bout); /* tell libvorbis how many samples we actually consumed */ - } + } //while(samples>0) +// if (!samples) break; // why? how? }