int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int))

{

    int total = size;

    do {

        int len = FFMIN(f->end - f->wptr, size);

        if (func) {

            if (func(src, f->wptr, len) <= 0)

                break;

        } else {

            memcpy(f->wptr, src, len);

            src = (uint8_t*)src + len;

        }

// Write memory barrier needed for SMP here in theory

        f->wptr += len;

        if (f->wptr >= f->end)

            f->wptr = f->buffer;

        f->wndx += len;

        size -= len;

    } while (size > 0);

    return total - size;

}

int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int))

{

    int total = size;

    do {

        int len = FFMIN(f->end - f->wptr, size);

        if (func) {

            if (func(src, f->wptr, len) <= 0)

                break;

        } else {

            memcpy(f->wptr, src, len);

            src = (uint8_t*)src + len;

        }



        f->wptr += len;

        if (f->wptr >= f->end)

            f->wptr = f->buffer;

        f->wndx += len;

        size -= len;

    } while (size > 0);

    return total - size;

}

VAR_5intVAR_5 VAR_5av_fifo_generic_writeVAR_5(VAR_5AVFifoBufferVAR_5 *VAR_5VAR_0VAR_5, VAR_5voidVAR_5 *VAR_5VAR_1VAR_5, VAR_5intVAR_5 VAR_5VAR_2VAR_5, VAR_5intVAR_5 (*VAR_5VAR_3VAR_5)(VAR_5voidVAR_5*, VAR_5voidVAR_5*, VAR_5intVAR_5))

{

    VAR_5intVAR_5 VAR_5totalVAR_5 = VAR_5VAR_2VAR_5;

    VAR_5doVAR_5 {

        VAR_5intVAR_5 VAR_5lenVAR_5 = VAR_5FFMINVAR_5(VAR_5VAR_0VAR_5->VAR_5endVAR_5 - VAR_5VAR_0VAR_5->VAR_5wptrVAR_5, VAR_5VAR_2VAR_5);

        VAR_5ifVAR_5 (VAR_5VAR_3VAR_5) {

            VAR_5ifVAR_5 (VAR_5VAR_3VAR_5(VAR_5VAR_1VAR_5, VAR_5VAR_0VAR_5->VAR_5wptrVAR_5, VAR_5lenVAR_5) <= VAR_50VAR_5)

                VAR_5breakVAR_5;

        } VAR_5elseVAR_5 {

            VAR_5memcpyVAR_5(VAR_5VAR_0VAR_5->VAR_5wptrVAR_5, VAR_5VAR_1VAR_5, VAR_5lenVAR_5);

            VAR_5VAR_1VAR_5 = (VAR_5uint8_tVAR_5*)VAR_5VAR_1VAR_5 + VAR_5lenVAR_5;

        }



        VAR_5VAR_0VAR_5->VAR_5wptrVAR_5 += VAR_5lenVAR_5;

        VAR_5ifVAR_5 (VAR_5VAR_0VAR_5->VAR_5wptrVAR_5 >= VAR_5VAR_0VAR_5->VAR_5endVAR_5)

            VAR_5VAR_0VAR_5->VAR_5wptrVAR_5 = VAR_5VAR_0VAR_5->VAR_5bufferVAR_5;

        VAR_5VAR_0VAR_5->VAR_5wndxVAR_5 += VAR_5lenVAR_5;

        VAR_5VAR_2VAR_5 -= VAR_5lenVAR_5;

    } VAR_5whileVAR_5 (VAR_5VAR_2VAR_5 > VAR_50VAR_5);

    VAR_5returnVAR_5 VAR_5totalVAR_5 - VAR_5VAR_2VAR_5;

}

VAR_5intVAR_5 VAR_5av_fifo_generic_writeVAR_5(VAR_5AVFifoBufferVAR_5 *VAR_5VAR_0VAR_5, VAR_5voidVAR_5 *VAR_5VAR_1VAR_5, VAR_5intVAR_5 VAR_5VAR_2VAR_5, VAR_5intVAR_5 (*VAR_5VAR_3VAR_5)(VAR_5voidVAR_5*, VAR_5voidVAR_5*, VAR_5intVAR_5))
{ VAR_5intVAR_5 VAR_5totalVAR_5 = VAR_5VAR_2VAR_5; VAR_5doVAR_5 { VAR_5intVAR_5 VAR_5lenVAR_5 = VAR_5FFMINVAR_5(VAR_5VAR_0VAR_5->VAR_5endVAR_5 - VAR_5VAR_0VAR_5->VAR_5wptrVAR_5, VAR_5VAR_2VAR_5); VAR_5ifVAR_5 (VAR_5VAR_3VAR_5) { VAR_5ifVAR_5 (VAR_5VAR_3VAR_5(VAR_5VAR_1VAR_5, VAR_5VAR_0VAR_5->VAR_5wptrVAR_5, VAR_5lenVAR_5) <= VAR_50VAR_5)
VAR_5breakVAR_5; } VAR_5elseVAR_5 { VAR_5memcpyVAR_5(VAR_5VAR_0VAR_5->VAR_5wptrVAR_5, VAR_5VAR_1VAR_5, VAR_5lenVAR_5); VAR_5VAR_1VAR_5 = (VAR_5uint8_tVAR_5*)VAR_5VAR_1VAR_5 + VAR_5lenVAR_5; } VAR_5VAR_0VAR_5->VAR_5wptrVAR_5 += VAR_5lenVAR_5; VAR_5ifVAR_5 (VAR_5VAR_0VAR_5->VAR_5wptrVAR_5 >= VAR_5VAR_0VAR_5->VAR_5endVAR_5)
VAR_5VAR_0VAR_5->VAR_5wptrVAR_5 = VAR_5VAR_0VAR_5->VAR_5bufferVAR_5; VAR_5VAR_0VAR_5->VAR_5wndxVAR_5 += VAR_5lenVAR_5; VAR_5VAR_2VAR_5 -= VAR_5lenVAR_5; } VAR_5whileVAR_5 (VAR_5VAR_2VAR_5 > VAR_50VAR_5); VAR_5returnVAR_5 VAR_5totalVAR_5 - VAR_5VAR_2VAR_5; }