int av_fifo_generic_read(AVFifoBuffer *f, int buf_size, void (*func)(void*, void*, int), void* dest)

{

    int size = av_fifo_size(f);



    if (size < buf_size)

        return -1;

    do {

        int len = FFMIN(f->end - f->rptr, buf_size);

        if(func) func(dest, f->rptr, len);

        else{

            memcpy(dest, f->rptr, len);

            dest = (uint8_t*)dest + len;

        }

        av_fifo_drain(f, len);

        buf_size -= len;

    } while (buf_size > 0);

    return 0;

}

int av_fifo_generic_read(AVFifoBuffer *f, int buf_size, void (*func)(void*, void*, int), void* dest)

{

    int size = av_fifo_size(f);



    if (size < buf_size)

        return -1;

    do {

        int len = FFMIN(f->end - f->rptr, buf_size);

        if(func) func(dest, f->rptr, len);

        else{

            memcpy(dest, f->rptr, len);

            dest = (uint8_t*)dest + len;

        }

        av_fifo_drain(f, len);

        buf_size -= len;

    } while (buf_size > 0);

    return 0;

}

    int size = av_fifo_size(f);     if (size < buf_size)         return -1;
VAR_4intVAR_4 VAR_4av_fifo_generic_readVAR_4(VAR_4AVFifoBufferVAR_4 *VAR_4VAR_0VAR_4, VAR_4intVAR_4 VAR_4VAR_1VAR_4, VAR_4voidVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4voidVAR_4*, VAR_4voidVAR_4*, VAR_4intVAR_4), VAR_4voidVAR_4* VAR_4destVAR_4)

{

    VAR_4intVAR_4 VAR_4sizeVAR_4 = VAR_4av_fifo_sizeVAR_4(VAR_4VAR_0VAR_4);



    VAR_4ifVAR_4 (VAR_4sizeVAR_4 < VAR_4VAR_1VAR_4)

        VAR_4returnVAR_4 -VAR_41VAR_4;

    VAR_4doVAR_4 {

        VAR_4intVAR_4 VAR_4lenVAR_4 = VAR_4FFMINVAR_4(VAR_4VAR_0VAR_4->VAR_4endVAR_4 - VAR_4VAR_0VAR_4->VAR_4rptrVAR_4, VAR_4VAR_1VAR_4);

        VAR_4ifVAR_4(VAR_4VAR_2VAR_4) VAR_4VAR_2VAR_4(VAR_4destVAR_4, VAR_4VAR_0VAR_4->VAR_4rptrVAR_4, VAR_4lenVAR_4);

        VAR_4elseVAR_4{

            VAR_4memcpyVAR_4(VAR_4destVAR_4, VAR_4VAR_0VAR_4->VAR_4rptrVAR_4, VAR_4lenVAR_4);

            VAR_4destVAR_4 = (VAR_4uint8_tVAR_4*)VAR_4destVAR_4 + VAR_4lenVAR_4;

        }

        VAR_4av_fifo_drainVAR_4(VAR_4VAR_0VAR_4, VAR_4lenVAR_4);

        VAR_4VAR_1VAR_4 -= VAR_4lenVAR_4;

    } VAR_4whileVAR_4 (VAR_4VAR_1VAR_4 > VAR_40VAR_4);

    VAR_4returnVAR_4 VAR_40VAR_4;

}

VAR_4intVAR_4 VAR_4av_fifo_generic_readVAR_4(VAR_4AVFifoBufferVAR_4 *VAR_4VAR_0VAR_4, VAR_4intVAR_4 VAR_4VAR_1VAR_4, VAR_4voidVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4voidVAR_4*, VAR_4voidVAR_4*, VAR_4intVAR_4), VAR_4voidVAR_4* VAR_4destVAR_4)
{ VAR_4intVAR_4 VAR_4sizeVAR_4 = VAR_4av_fifo_sizeVAR_4(VAR_4VAR_0VAR_4); VAR_4ifVAR_4 (VAR_4sizeVAR_4 < VAR_4VAR_1VAR_4)
VAR_4returnVAR_4 -VAR_41VAR_4; VAR_4doVAR_4 { VAR_4intVAR_4 VAR_4lenVAR_4 = VAR_4FFMINVAR_4(VAR_4VAR_0VAR_4->VAR_4endVAR_4 - VAR_4VAR_0VAR_4->VAR_4rptrVAR_4, VAR_4VAR_1VAR_4); VAR_4ifVAR_4(VAR_4VAR_2VAR_4) VAR_4VAR_2VAR_4(VAR_4destVAR_4, VAR_4VAR_0VAR_4->VAR_4rptrVAR_4, VAR_4lenVAR_4); VAR_4elseVAR_4{ VAR_4memcpyVAR_4(VAR_4destVAR_4, VAR_4VAR_0VAR_4->VAR_4rptrVAR_4, VAR_4lenVAR_4); VAR_4destVAR_4 = (VAR_4uint8_tVAR_4*)VAR_4destVAR_4 + VAR_4lenVAR_4; } VAR_4av_fifo_drainVAR_4(VAR_4VAR_0VAR_4, VAR_4lenVAR_4); VAR_4VAR_1VAR_4 -= VAR_4lenVAR_4; } VAR_4whileVAR_4 (VAR_4VAR_1VAR_4 > VAR_40VAR_4); VAR_4returnVAR_4 VAR_40VAR_4; }