<div dir="ltr">On Sat, Sep 21, 2013 at 10:56 AM, Rafaël Carré <span dir="ltr"><<a href="mailto:funman@videolan.org" target="_blank">funman@videolan.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Hello,<br></div><br><div>
I send a small patchset which fixes a few problems I had.<br></div></blockquote><div><br></div><div>Thanks.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Some questions left:<br>
<br>
Le 19/09/2013 08:56, Tristan Matthews a écrit :<br>
<div><div class="h5"><br>
> +static block_t *Encode(encoder_t *enc, block_t *buf)<br>
> +{<br>
> +    encoder_sys_t *sys = enc->p_sys;<br>
> +    opus_int32 bytes_encoded;<br>
> +<br>
> +    if (!buf)<br>
> +        return NULL;<br>
> +<br>
> +    mtime_t i_pts = buf->i_pts -<br>
> +                (mtime_t) CLOCK_FREQ * (mtime_t) sys->i_samples_delay /<br>
> +                (mtime_t) enc->fmt_in.audio.i_rate;<br>
> +<br>
> +    sys->i_samples_delay += buf->i_nb_samples;<br>
> +<br>
> +    block_t *result = 0;<br>
> +    unsigned src_start = 0;<br>
> +    unsigned padding_start = 0;<br>
> +    /* The maximum Opus frame size is 1275 bytes + TOC sequence length. */<br>
> +    const unsigned OPUS_MAX_ENCODED_BYTES = ((1275 + 3) * sys->nb_streams) - 2;<br>
> +<br>
> +    while (sys->i_nb_samples + buf->i_nb_samples >= OPUS_FRAME_SIZE)<br>
> +    {<br>
> +        block_t *out_block = block_Alloc(OPUS_MAX_ENCODED_BYTES);<br>
> +<br>
> +        /* add padding to beginning */<br>
> +        if (sys->padding)<br>
> +        {<br>
> +            const size_t leftover_space = OPUS_FRAME_SIZE - sys->i_nb_samples;<br>
> +            padding_start = fill_buffer(enc, padding_start, sys->padding,<br>
> +                    __MIN(sys->padding->i_nb_samples, leftover_space));<br>
> +            if (sys->padding->i_nb_samples <= 0)<br>
> +            {<br>
> +                block_Release(sys->padding);<br>
> +                sys->padding = 0;<br>
> +            }<br>
> +        }<br>
> +<br>
> +        /* padding may have been freed either before or inside previous<br>
> +         * if-statement */<br>
> +        if (!sys->padding)<br>
> +        {<br>
> +            const size_t leftover_space = OPUS_FRAME_SIZE - sys->i_nb_samples;<br>
> +            src_start = fill_buffer(enc, src_start, buf,<br>
> +                    __MIN(buf->i_nb_samples, leftover_space));<br>
> +        }<br>
> +<br>
> +        bytes_encoded = opus_multistream_encode_float(sys->enc, sys->buffer,<br>
> +                OPUS_FRAME_SIZE, out_block->p_buffer, out_block->i_buffer);<br>
> +<br>
> +        out_block->i_length = (mtime_t) CLOCK_FREQ *<br>
> +            (mtime_t) OPUS_FRAME_SIZE / (mtime_t) enc->fmt_in.audio.i_rate;<br>
> +<br>
> +        out_block->i_dts = out_block->i_pts = i_pts;<br>
<br>
</div></div>Those should be moved in "if (bytes_encoded >= 0)"<br>
<div class="im"><br>
> +<br>
> +        sys->i_samples_delay -= OPUS_FRAME_SIZE;<br>
> +<br>
> +        i_pts += out_block->i_length;<br>
> +<br>
> +        sys->i_nb_samples = 0;<br>
> +<br>
<br>
</div>What about those?<br></blockquote><div><br></div><div>Quite right, they should all be in the bytes_encoded >= (aka else)<br></div><div>branch. <br><br></div><div>Best,<br>Tristan<br><br></div></div>-- <br>Tristan Matthews<br>
web: <a href="http://tristanswork.blogspot.com">http://tristanswork.blogspot.com</a><br>
</div></div>