summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ffmpeg.c7
-rw-r--r--libavformat/mpegenc.c4
-rw-r--r--libavutil/fifo.c8
3 files changed, 6 insertions, 13 deletions
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);