[FFmpeg-devel] [PATCH 17/18] avcodec/pthread_slice: Reuse buffer if possible

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Jul 22 23:04:09 EEST 2022


Tomas Härdin:
> fre 2022-07-01 klockan 00:29 +0200 skrev Andreas Rheinhardt:
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
>> ---
>>  libavcodec/pthread_slice.c | 6 ++++--
>>  1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c
>> index 756cc59dbf..a4d31c6f4d 100644
>> --- a/libavcodec/pthread_slice.c
>> +++ b/libavcodec/pthread_slice.c
>> @@ -242,9 +242,11 @@ int
>> ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count)
>>      if (avctx->active_thread_type & FF_THREAD_SLICE)  {
>>          SliceThreadContext *p = avctx->internal->thread_ctx;
>>  
>> -        if (p->entries) {
>> -            av_freep(&p->entries);
>> +        if (p->entries_count == count) {
>> +            memset(p->entries, 0, p->entries_count * sizeof(*p-
>>> entries));
>> +            return 0;
> 
> Couldn't this trivially handle p->entries_count < count also?
> 

Yes, but then this would basically be yet another never-shrinking
buffer. And with every such never-shrinking buffer I fear that we might
allocate too much forever (e.g. because of a single invalid packet).

>>          }
>> +        av_freep(&p->entries);
>>  
>>          p->entries       = av_calloc(count, sizeof(*p->entries));
>>          if (!p->entries) {
> 
> Looks like we could use an av_fast_calloc()
> 
> /Tomas
> 



More information about the ffmpeg-devel mailing list