[FFmpeg-devel] libavcodec memory usage

Matthieu Beghin matthieu.beghin at garagecube.com
Tue Jan 3 19:16:18 EET 2017


> On 03 Jan 2017, at 17:55, Ronald S. Bultje <rsbultje at gmail.com> wrote:
> 
> Hi,
> 
> On Tue, Jan 3, 2017 at 11:44 AM, Matthieu Beghin <
> matthieu.beghin at garagecube.com> wrote:
> 
>>> I'm assuming that you're talking about 8K H264 with pixfmt=yuv420p10? 8K
>> yuv420p10 frames are 100MB
>> 
>> Correct
>> 
>>> 32 plus delayed output and current_pic gives H264_MAX_PICTURE_COUNT = 36
>> without threading: 36*100=3.6GB.
>> 
>> What do you mean by "delayed output” ? Can you link me to a document ?
> 
> 
> Out-of-order coded P-frames, they are buffered internally but not counted
> (and thus extra) on top of the max_refs value. I believe the spec calls
> this dpb (delayed pic buffer).
> 
>> Or maybe consider ditching 32bit support?
>> 
>> Unfortunately, that’s 10 years old app using OSX Carbon library (not 64
>> bits), and rewriting that part would be too much work.
>> 
> 
> I'm frowning at you. Really badly.
> 
> As an alternative, is there a way to know how much bytes are buffered ?
>> Iterating buffered frames ?
> 
> 
> What are you hoping to accomplish by knowing how many bytes are buffered?
> It doesn't solve the problem? But anyway, check
> H264Context->short/long_ref[]; delayed_pic[] gives you the delayed output.
> 

I’m trying to let people use 8k movies if it will fit, but in case it would use more than 1 GB, refuse to load the file. My application is a live application, it cannot crash, and actually, it can...

So to know how much bytes livavcodec is using, I have to know the number of frames / field, if it is interlaced and the number of delayed frames, that's correct ?

How can I know the number of frames / field ?
To know if it’s interlaced: AVFrame::interlaced_frame
Number of delayed frames ?

Another solution is to start playing the movie and to check the buffered data amount each time I decode a frame, then stop the movie if it uses more than 1 GB...
In this case, just iterating H264Context->short/long_ref[]; delayed_pic[] would be enough ?
How can I get the H264Context ? 

Thanks !
Matthieu



> Ronald
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel



More information about the ffmpeg-devel mailing list