Hello, I have written a decoder for a video (gif-like) format[1] which, due to the nature of the format, is fed packets until it detects the end of stream[2]. Until then, no frames are outputted and AVERROR(EAGAIN) is returned.
After the stream is completely processed, the decoder starts to try to output all the frames one by one. However, the decoder stops after the first frame. I am currently using doc/examples/decode_video.c for testing the decoder. The concerned part is: ret = avcodec_send_packet(dec_ctx, pkt); if (ret < 0) { fprintf(stderr, "Error sending a packet for decoding\n"); exit(1); } while (ret >= 0) { ret = avcodec_receive_frame(dec_ctx, frame); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) return; else if (ret < 0) { fprintf(stderr, "Error during decoding\n"); exit(1); } // Frame writing routines // ... } In libavcodec/decode.c, decode_simple_internal(), the function exits on the condition of (ret < 0 && ret != AVERROR_EOF), after outputting the first frame as shown below: if (!pkt->data && !avci->draining) { av_packet_unref(pkt); ret = ff_decode_get_packet(avctx, pkt); if (ret < 0 && ret != AVERROR_EOF) return ret; } What I am guessing is happening is that while the decoder is spitting out frames in the while loop, calling avcodec_receive_frame causes the last packet (the packet that the decoder will be on until all the frames are outputted) is being unreferenced, and that causes the packet to be freed and the aforementioned condition to fail. At the end of doc/examples/decode_video.c, there is this call: decode(c, frame, NULL, outfilename); Which I think is the "draining" condition. However I don't think the specific decode_frame is being called here What should I do to mitigate this? Should I reference the packet within the decoder until al the frames are outputted, or are there some special routines for handling this condition that I don't know about? [1]: https://flif.info/spec.html, [2]: http://ffmpeg.org/pipermail/ffmpeg-devel/2020-March/258465.html --- Regards, Anamitra _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".