On środa, 26 marca 2008, Michael Niedermayer wrote:
while (buf_size > 0) { int size_needed= s->frame_size ? s->frame_size : s->header_size; len = s->inbuf_ptr - s->inbuf;
@@ -56,7 +64,14 @@ memmove(s->inbuf, s->inbuf + 1, s->header_size - 1); s->inbuf_ptr--; } else { - s->frame_size = len; + if(!s->stream_type) { + if(s->inbuf != s->inbuf_tab) { + *poutbuf = s->inbuf_tab; + *poutbuf_size = s->inbuf - s->inbuf_tab; + s->inbuf_ptr = s->inbuf_tab; + s->frame_size = 0; + break; + }
this is VERY hackish, stream_type has from the point of view of a generic (AAC+AC3+EAC3) parser no relation to the number of frames over which channels are split.
/* update codec info */ avctx->sample_rate = s->sample_rate; /* allow downmixing to stereo (or mono for AC3) */ @@ -71,15 +86,18 @@ } avctx->bit_rate = s->bit_rate; avctx->frame_size = s->samples; + } else { + //TODO update bit_rate + avctx->frame_size += s->samples; + } + s->frame_size = len; } } } else {
if(s->inbuf_ptr - s->inbuf == s->frame_size){ - *poutbuf = s->inbuf; - *poutbuf_size = s->frame_size; + s->inbuf += s->frame_size; s->inbuf_ptr = s->inbuf; s->frame_size = 0; - break; }
this causes additional copying and delay i think for normal AC3 & AAC
Hi, Maybe this: if(eac3 stream){ // new code }else{ // existing code } will be a good solution for these problems? -- Bartlomiej Wolowiec