diff --git a/ffmpeg.c b/ffmpeg.c index dc53f34c34..544927956f 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -592,10 +592,12 @@ static void do_audio_out(AVFormatContext *s, frame_bytes = enc->frame_size * 2 * enc->channels; - while (av_fifo_read(&ost->fifo, audio_buf, frame_bytes) == 0) { + while (av_fifo_size(&ost->fifo) >= frame_bytes) { AVPacket pkt; av_init_packet(&pkt); + av_fifo_read(&ost->fifo, audio_buf, frame_bytes); + //FIXME pass ost->sync_opts as AVFrame.pts in avcodec_encode_audio() ret = avcodec_encode_audio(enc, audio_out, audio_out_size, @@ -1385,9 +1387,8 @@ static int output_packet(AVInputStream *ist, int ist_index, if(fifo_bytes > 0 && enc->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) { int fs_tmp = enc->frame_size; enc->frame_size = fifo_bytes / (2 * enc->channels); - if(av_fifo_read(&ost->fifo, (uint8_t *)samples, fifo_bytes) == 0) { + av_fifo_read(&ost->fifo, (uint8_t *)samples, fifo_bytes); ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, samples); - } enc->frame_size = fs_tmp; } if(ret <= 0) { diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index 05c72cd1e7..c96ffd1684 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -913,8 +913,8 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, } /* output data */ - if(av_fifo_generic_read(&stream->fifo, payload_size - stuffing_size, &put_buffer, ctx->pb) < 0) - return -1; + assert(payload_size - stuffing_size <= av_fifo_size(&stream->fifo)); + av_fifo_generic_read(&stream->fifo, payload_size - stuffing_size, &put_buffer, ctx->pb); stream->bytes_to_iframe -= payload_size - stuffing_size; }else{ payload_size= diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 19ec13e63d..f2ace514bd 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -45,9 +45,6 @@ int av_fifo_size(AVFifoBuffer *f) return size; } -/** - * Get data from the fifo (returns -1 if not enough data). - */ int av_fifo_read(AVFifoBuffer *f, uint8_t *buf, int buf_size) { return av_fifo_generic_read(f, buf_size, NULL, buf); @@ -97,13 +94,8 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void } -/** get data from the fifo (return -1 if not enough data) */ 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);