On 12/10/2018 15:30, Jan Ekström wrote:
And while it seems like we're focusing on the arbitrary limit in
av_malloc (which is an issue of its own), I do note that for this
specific case this "worst case packed frame size" allocation heuristic
might have to be modified? Or at least explained if possible, so that
things can be improved in a proper way.


Thank you for the feedback.
I was focused on ff_alloc_packet2() which accepts 64-bit integers, and I did not check what is behind (limited to INT_MAX too). I understand now that this is a global limit, not tied to FFV1 encoder (but when this limit is removed from mem.h, there will be a review of ode which test this limit before calling ff_alloc_packet2()...).

As you said in the other answer, it was unrealistic to hit such limit in 2005, but now... 2 GB by packet is still huge (the input frame is "only" 128 MB), but the multiplier used in FFV1 encoder makes the limit hit for "basic" 4K frames. 8K frames are approaching... A bit complex for me to remove this 2 GB  limit for sure everywhere :(, so I try to find another solution.



For historical context, this limit has been inside ffv1enc as follows,
number 1 being the current version:
1. avctx->width*avctx->height*37LL*4 ("added support for
AV_PIX_FMT_GBRP16" - ce2217b25eccda9f5c14022bd69792e71b417b73)
2. avctx->width*avctx->height*35LL*4 ("avcodec/ffv1enc: fix size used
for ff_alloc_packet2()" - 904a2864bdafe19d18db95ca54dfb36d72957a16)
3. avctx->width*avctx->height*((8*2+1+1)*4)/8 ("ffv1enc: switch to
encode2()." - 278d88689ba89c78f6c2667cf98025835567d78d)
4. ??? Limit was probably somewhere elsewhere or didn't exist before this

I see it but still don't catch the reason (and I am very curious to find an input frame able to e.g. make an output  frame 2x bigger than the input frame).
Eager to have some background about it (Michael?).

I guess there is a good reason for the "37LL*4" which is huge (note: I am afraid I did not update this limit when I implemented AV_PIX_FMT_GBRAP16, which is 4/3x bigger), so now trying to find a way to warn the user but not with 1 message per frame.

If I can not (easily) remove this limitation, would limiting the message to 1 iteration for a whole stream be an acceptable patch?
If so I'll send such patch.

Jérôme


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to