diff --git a/app/src/main/cpp/metadata/ffmpeg_media_retriever.c b/app/src/main/cpp/metadata/ffmpeg_media_retriever.c index 84a21f0..70fa3d7 100755 --- a/app/src/main/cpp/metadata/ffmpeg_media_retriever.c +++ b/app/src/main/cpp/metadata/ffmpeg_media_retriever.c @@ -584,18 +584,23 @@ void decode_frame(State *state, AVPacket *pkt, int *got_frame, int64_t desired_f int ret = avcodec_receive_frame(pCodecContext, frame); if (ret == 0) { *got_frame = 1; + } else if (ret == AVERROR(EAGAIN)) { + continue; } else { + LOGE("decode frame fail..."); break; } - if (desired_frame_number == -1 || - (desired_frame_number != -1 && frame->pts >= desired_frame_number)) { - if (pkt->data) { - av_packet_unref(pkt); + if (*got_frame) { + if (desired_frame_number == -1 || + (desired_frame_number != -1 && frame->pts >= desired_frame_number)) { + if (pkt->data) { + av_packet_unref(pkt); + } + av_init_packet(pkt); + convert_image(state, pCodecContext, frame, pkt, got_frame, width, height); + break; } - av_init_packet(pkt); - convert_image(state, pCodecContext, frame, pkt, got_frame, width, height); - break; } } else { *got_frame = 1;