Fixed: try decode again when decode err_code=EAGAIN

pull/209/head
xufuji456 3 years ago
parent 2a5285140a
commit ecacd62377
  1. 5
      app/src/main/cpp/metadata/ffmpeg_media_retriever.c

@ -584,10 +584,14 @@ void decode_frame(State *state, AVPacket *pkt, int *got_frame, int64_t desired_f
int ret = avcodec_receive_frame(pCodecContext, frame); int ret = avcodec_receive_frame(pCodecContext, frame);
if (ret == 0) { if (ret == 0) {
*got_frame = 1; *got_frame = 1;
} else if (ret == AVERROR(EAGAIN)) {
continue;
} else { } else {
LOGE("decode frame fail...");
break; break;
} }
if (*got_frame) {
if (desired_frame_number == -1 || if (desired_frame_number == -1 ||
(desired_frame_number != -1 && frame->pts >= desired_frame_number)) { (desired_frame_number != -1 && frame->pts >= desired_frame_number)) {
if (pkt->data) { if (pkt->data) {
@ -596,6 +600,7 @@ void decode_frame(State *state, AVPacket *pkt, int *got_frame, int64_t desired_f
av_init_packet(pkt); av_init_packet(pkt);
convert_image(state, pCodecContext, frame, pkt, got_frame, width, height); convert_image(state, pCodecContext, frame, pkt, got_frame, width, height);
break; break;
}
} }
} else { } else {
*got_frame = 1; *got_frame = 1;

Loading…
Cancel
Save