[FFmpeg-devel] [PATCH v3 3/3] lavc/libdavs2.c: use decoder data directly instead of memcpy

hwren hwrenx at 126.com
Sat Jul 13 06:17:01 EEST 2019


At 2019-07-13 01:38:55, "Marton Balint" <cus at passwd.hu> wrote:
>
>
>On Fri, 12 Jul 2019, hwrenx wrote:
>
>> Can effectivly improved decoding speed when memcpy becomes a limitation
>> for proccessing high resolution source.
>> Tested under i7-8700k with `ffmpeg -i 7680x4320.avs2 -vsync 0 -f null -`
>> got performance 23fps => 42fps
>>
>> Signed-off-by: hwrenx <hwrenx at 126.com>
>> ---
>> libavcodec/libdavs2.c | 54 +++++++++++++++++++++++++++++----------------------
>> 1 file changed, 31 insertions(+), 23 deletions(-)
>>
>> diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c
>> index 1b274a3..af0778f 100644
>> --- a/libavcodec/libdavs2.c
>> +++ b/libavcodec/libdavs2.c
>> @@ -60,13 +60,24 @@ static av_cold int davs2_init(AVCodecContext *avctx)
>>     return 0;
>> }
>> 
>> +static void davs2_frame_unref(void *opaque, uint8_t *data) {
>> +    DAVS2Context    *cad = (DAVS2Context *)opaque;
>> +    davs2_picture_t  pic;
>> +
>> +    pic.magic = (davs2_picture_t *)data;
>> +
>> +    if (cad->decoder) {
>> +        davs2_decoder_frame_unref(cad->decoder, &pic);
>> +    } else {
>> +        av_log(NULL, AV_LOG_WARNING, "Decoder not found, frame unreference failed.\n");
>
>Whoa, this should not happen, and you have to be prepared that the user 
>might close the decoder before freeing the last frame.

I hope so, actually it's harmless if we failed to unref some frames outside davs2 when decoder
was closed through davs2_decoder_close(). The decoder will free the memory which contains
all recycle data itself.

>
>Maybe you should use some refcounting and create references to the 
>decoder, others may have a better idea.
>
>Regards,
>Marton

Of course, anyway, it would be better if there are any ways to make sure we correctly freed all
frames even decoder was not found or exited without a davs2_decoder_close().  But force to
free the memory immediately in the call back function can cause troubles to decoder and I'm
not very clearly understand how to use reference to deal with this problem inside a codec.


Maybe that means I could reference the buffer and waiting ffmpeg to free them once they were
not handled by davs2?

Thanks :-)
Huiwen REN

>_______________________________________________
>ffmpeg-devel mailing list
>ffmpeg-devel at ffmpeg.org
>https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>To unsubscribe, visit link above, or email
>ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list