diff --git a/ffmpeg.c b/ffmpeg.c index 7ea4a943fa..74cfd095d0 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1417,7 +1417,7 @@ static int output_packet(AVInputStream *ist, int ist_index, AVFormatContext *os; AVOutputStream *ost; int ret, i; - int got_picture; + int got_output; AVFrame picture; void *buffer_to_free; static unsigned int samples_size= 0; @@ -1449,7 +1449,7 @@ static int output_packet(AVInputStream *ist, int ist_index, pkt_pts = av_rescale_q(pkt->pts, ist->st->time_base, AV_TIME_BASE_Q); //while we have more to decode or while the decoder did output something on EOF - while (avpkt.size > 0 || (!pkt && ist->next_pts != ist->pts)) { + while (avpkt.size > 0 || (!pkt && got_output)) { uint8_t *data_buf, *decoded_data_buf; int data_size, decoded_data_size; handle_eof: @@ -1485,9 +1485,10 @@ static int output_packet(AVInputStream *ist, int ist_index, avpkt.data += ret; avpkt.size -= ret; data_size = ret; + got_output = decoded_data_size > 0; /* Some bug in mpeg audio decoder gives */ /* decoded_data_size < 0, it seems they are overflows */ - if (decoded_data_size <= 0) { + if (!got_output) { /* no audio frame */ continue; } @@ -1504,11 +1505,11 @@ static int output_packet(AVInputStream *ist, int ist_index, pkt_pts = AV_NOPTS_VALUE; ret = avcodec_decode_video2(ist->st->codec, - &picture, &got_picture, &avpkt); + &picture, &got_output, &avpkt); ist->st->quality= picture.quality; if (ret < 0) goto fail_decode; - if (!got_picture) { + if (!got_output) { /* no picture yet */ goto discard_packet; } @@ -1523,10 +1524,10 @@ static int output_packet(AVInputStream *ist, int ist_index, break; case AVMEDIA_TYPE_SUBTITLE: ret = avcodec_decode_subtitle2(ist->st->codec, - &subtitle, &got_picture, &avpkt); + &subtitle, &got_output, &avpkt); if (ret < 0) goto fail_decode; - if (!got_picture) { + if (!got_output) { goto discard_packet; } subtitle_to_free = &subtitle;