[FFmpeg-devel] [PATCH] Add and use av_fast_padded_malloc.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Tue Jan 17 08:08:48 CET 2012


On Tue, Jan 17, 2012 at 04:26:43AM +0100, Michael Niedermayer wrote:
> On Tue, Jan 17, 2012 at 12:18:17AM +0100, Reimar Döffinger wrote:
> > The same as av_fast_malloc but uses av_mallocz and keeps extra
> > always-0 padding.
> > This does not mean the memory will be 0-initialized after each call,
> > but actually only after each growth of the buffer.
> > However this makes sure that
> > a) all data anywhere in the buffer is always initialized
> > b) the padding is always 0
> > c) the user does not have to bother with adding the padding themselves
> > Fixes another valgrind warning about use of uninitialized data,
> > this time with fate-vsynth1-jpegls.
> > 
> > Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
> 
> LGTM

I wonder if it would be better to make the size of the padding an
argument.
Because I also needed below patch.
Though not having to specify the padding size in almost all cases
might be worth having to memset manually in a rare few.
Note that I think the "si" code that tries to detect if a memset
is necessary is completely broken and I have some doubts trying
to avoid it will give any relevant speedup (how often will the
size be exactly the same?)
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -194,11 +194,9 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src, int *dst_l
     }
 
     bufidx = h->nal_unit_type == NAL_DPC ? 1 : 0; // use second escape buffer for inter data
-    si=h->rbsp_buffer_size[bufidx];
-    av_fast_malloc(&h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length+FF_INPUT_BUFFER_PADDING_SIZE+MAX_MBPAIR_SIZE);
+    av_fast_padded_malloc(&h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length+MAX_MBPAIR_SIZE);
     dst= h->rbsp_buffer[bufidx];
-    if(si != h->rbsp_buffer_size[bufidx])
-        memset(dst + length, 0, FF_INPUT_BUFFER_PADDING_SIZE+MAX_MBPAIR_SIZE);
+    memset(dst + length, 0, MAX_MBPAIR_SIZE);
 
     if (dst == NULL){
         return NULL;


More information about the ffmpeg-devel mailing list