From ecacd62377f25035900854acf034c188d80acd70 Mon Sep 17 00:00:00 2001 From: xufuji456 Date: Wed, 16 Mar 2022 15:13:46 +0800 Subject: [PATCH] Fixed: try decode again when decode err_code=EAGAIN --- .../cpp/metadata/ffmpeg_media_retriever.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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;