[FFmpeg-devel] [PATCH v3] lavc: convert frame threading to the receive_frame() pattern

James Almer jamrial at gmail.com
Fri Dec 9 15:11:34 EET 2022


On 12/9/2022 10:09 AM, Timo Rothenpieler wrote:
> On 07/12/2022 23:22, Michael Niedermayer wrote:
>> On Wed, Dec 07, 2022 at 02:20:23PM +0100, Timo Rothenpieler wrote:
>>> From: Anton Khirnov <anton at khirnov.net>
>>>
>>> Reorganize the code such that the frame threading code does not call the
>>> decoders directly, but instead calls back into the generic decoding
>>> code. This avoids duplicating the logic that wraps the decoder
>>> invocation and will be useful in the following commits.
>>> ---
>>>   libavcodec/decode.c        |  57 +++++----
>>>   libavcodec/decode.h        |   7 +
>>>   libavcodec/internal.h      |   7 +
>>>   libavcodec/pthread_frame.c | 256 ++++++++++++++++++++++++-------------
>>>   libavcodec/thread.h        |  18 +--
>>>   5 files changed, 222 insertions(+), 123 deletions(-)
>>
>> This breaks on arm (probably lack of pthread support) in this env
>>
>> libavcodec/libavcodec.a(decode.o): In function 
>> `decode_receive_frame_internal':
>> arm/src/libavcodec/decode.c:616: undefined reference to 
>> `ff_thread_receive_frame'
>> arm/src/libavcodec/decode.c:616: undefined reference to 
>> `ff_thread_receive_frame'
>> collect2: error: ld returned 1 exit status
>> Makefile:131: recipe for target 'ffprobe_g' failed
>> make: *** [ffprobe_g] Error 1
> 
> Probably just missing an #if somewhere.

Yes.

> +static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
> +{
> +    if (avctx->active_thread_type & FF_THREAD_FRAME)

Should be if (HAVE_THREADS && ...

> +        return ff_thread_receive_frame(avctx, frame);
> +    return ff_decode_receive_frame_internal(avctx, frame);
> +}



More information about the ffmpeg-devel mailing list