- r = avcodec_receive_frame (context, _video_frame);
- if (r == AVERROR(EAGAIN)) {
- /* More input is required */
- return true;
- } else if (r == AVERROR_EOF) {
- /* No more output is coming */
- return false;
- }
+ /* EAGAIN means we should call avcodec_receive_frame and then re-send the same packet */
+ pending = r == AVERROR(EAGAIN);
+
+ r = avcodec_receive_frame (context, _video_frame);
+ if (r == AVERROR(EAGAIN)) {
+ /* More input is required */
+ return true;
+ } else if (r == AVERROR_EOF) {
+ /* No more output is coming */
+ return false;
+ }
+ } while (pending);