|
|
|
@ -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; |
|
|
|
|