No, not all of them are.
Links are to function definitions; see for yourself!
av_freep
avformat_free_context
calls av_freep
on some pointers held by the AVFormatContext
which doesn't perform a NULL
check before passing the address of the memory to be freed off to av_free
(which is essentially just a call to free
; see below). It does, however, set the pointer to NULL.
av_free
If ffmpeg was compiled with CONFIG_MEMALIGN_HACK
defined, av_free
will do a NULL check before freeing. This will effectively make av_freep
idempotent for memory which is freed by av_freep(&pointer_to_data);
. This might not be the case for your build.
others
Additionally, some of the other functions called by avformat_free_context
are idempotent. They achieve this by clearing pointers and performing NULL checks, or decreasing array indexes to prevent a double free. Examples include ff_free_stream
and av_opt_free
.
avformat_free_context
avformat_free_context
will perform a NULL check before attempting to free the context. So if you pass NULL to it, you don't have to worry. However, if you double-free an AVFormatContext
you will end up doing a low-level double-free, because avformat_free_context
calls av_free
directly on the AVFormatContext
.
Advice
The safest thing to do when freeing a context is:
avformat_free_context(pcontext);
pcontext = NULL;