aboutsummaryrefslogtreecommitdiffstats
path: root/ffmpeg.c
diff options
context:
space:
mode:
authorAlexander Strange <astrange@ithinksw.com>2011-05-10 01:53:46 -0400
committerRonald S. Bultje <rsbultje@gmail.com>2011-05-10 07:23:51 -0400
commitcb48fdf67e765694ffcbd2aaee2b72ab1cb44de6 (patch)
tree158639d3f912f60403c41d770a73bb839a086d73 /ffmpeg.c
parent188dea1dbfd8761133ca138bba0d8f19beac6c09 (diff)
downloadffmpeg-cb48fdf67e765694ffcbd2aaee2b72ab1cb44de6.tar.gz
ffmpeg: Simplify decode loop condition to not use next_pts
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r--ffmpeg.c15
1 files changed, 8 insertions, 7 deletions
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;