diff mbox series

[FFmpeg-devel,08/11] avutil/half2float: move non-inline init code out of header

Message ID 20220810204712.3123-8-timo@rothenpieler.org
State New
Headers show
Series [FFmpeg-devel,01/11] lavu/pixfmt: add packed RGBA float16 format | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Timo Rothenpieler Aug. 10, 2022, 8:47 p.m. UTC
---
 libavcodec/Makefile     |  8 +++---
 libavcodec/exr.c        |  2 +-
 libavcodec/exrenc.c     |  2 +-
 libavcodec/float2half.c | 19 +++++++++++++
 libavcodec/half2float.c | 19 +++++++++++++
 libavcodec/pnmdec.c     |  2 +-
 libavcodec/pnmenc.c     |  2 +-
 libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
 libavutil/float2half.h  | 36 ++---------------------
 libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
 libavutil/half2float.h  | 46 ++----------------------------
 11 files changed, 166 insertions(+), 86 deletions(-)
 create mode 100644 libavcodec/float2half.c
 create mode 100644 libavcodec/half2float.c
 create mode 100644 libavutil/float2half.c
 create mode 100644 libavutil/half2float.c

Comments

Michael Niedermayer Aug. 11, 2022, 8:46 p.m. UTC | #1
On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
> ---
>  libavcodec/Makefile     |  8 +++---
>  libavcodec/exr.c        |  2 +-
>  libavcodec/exrenc.c     |  2 +-
>  libavcodec/float2half.c | 19 +++++++++++++
>  libavcodec/half2float.c | 19 +++++++++++++
>  libavcodec/pnmdec.c     |  2 +-
>  libavcodec/pnmenc.c     |  2 +-
>  libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
>  libavutil/float2half.h  | 36 ++---------------------
>  libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
>  libavutil/half2float.h  | 46 ++----------------------------
>  11 files changed, 166 insertions(+), 86 deletions(-)
>  create mode 100644 libavcodec/float2half.c
>  create mode 100644 libavcodec/half2float.c
>  create mode 100644 libavutil/float2half.c
>  create mode 100644 libavutil/half2float.c
> 
> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> index 029f1bad3d..cb80f73d99 100644
> --- a/libavcodec/Makefile
> +++ b/libavcodec/Makefile
> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
>  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
>  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
>  OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
>  OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
>  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
>  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
>  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
>  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
>  OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
>  OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
>  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
>  OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
> index 825354873d..a3582bfdd6 100644
> --- a/libavcodec/exr.c
> +++ b/libavcodec/exr.c
> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      float one_gamma = 1.0f / s->gamma;
>      avpriv_trc_function trc_func = NULL;
>  
> -    init_half2float_tables(&s->h2f_tables);
> +    ff_init_half2float_tables(&s->h2f_tables);
[...]
> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
> new file mode 100644
> index 0000000000..dba14cef5d
> --- /dev/null
> +++ b/libavutil/float2half.c
[...]
> +void ff_init_float2half_tables(float2half_tables *t)

this will need avpriv or break linking with shared libs

thx

[...]
Andreas Rheinhardt Aug. 11, 2022, 8:50 p.m. UTC | #2
Michael Niedermayer:
> On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
>> ---
>>  libavcodec/Makefile     |  8 +++---
>>  libavcodec/exr.c        |  2 +-
>>  libavcodec/exrenc.c     |  2 +-
>>  libavcodec/float2half.c | 19 +++++++++++++
>>  libavcodec/half2float.c | 19 +++++++++++++
>>  libavcodec/pnmdec.c     |  2 +-
>>  libavcodec/pnmenc.c     |  2 +-
>>  libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
>>  libavutil/float2half.h  | 36 ++---------------------
>>  libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
>>  libavutil/half2float.h  | 46 ++----------------------------
>>  11 files changed, 166 insertions(+), 86 deletions(-)
>>  create mode 100644 libavcodec/float2half.c
>>  create mode 100644 libavcodec/half2float.c
>>  create mode 100644 libavutil/float2half.c
>>  create mode 100644 libavutil/half2float.c
>>
>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>> index 029f1bad3d..cb80f73d99 100644
>> --- a/libavcodec/Makefile
>> +++ b/libavcodec/Makefile
>> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
>>  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
>>  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
>>  OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
>> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
>> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
>> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
>> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
>>  OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
>>  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
>>  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
>> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
>>  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
>>  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
>>  OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
>> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
>> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
>> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
>> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
>>  OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
>>  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
>>  OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
>> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
>> index 825354873d..a3582bfdd6 100644
>> --- a/libavcodec/exr.c
>> +++ b/libavcodec/exr.c
>> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>      float one_gamma = 1.0f / s->gamma;
>>      avpriv_trc_function trc_func = NULL;
>>  
>> -    init_half2float_tables(&s->h2f_tables);
>> +    ff_init_half2float_tables(&s->h2f_tables);
> [...]
>> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
>> new file mode 100644
>> index 0000000000..dba14cef5d
>> --- /dev/null
>> +++ b/libavutil/float2half.c
> [...]
>> +void ff_init_float2half_tables(float2half_tables *t)
> 
> this will need avpriv or break linking with shared libs
> 

No, because this code is duplicated into all libraries that need it.
(In case of static linking, only one of the variants will be used
(namely the first one encountered in the link.)

- Andreas
Michael Niedermayer Aug. 11, 2022, 9:16 p.m. UTC | #3
On Thu, Aug 11, 2022 at 10:50:10PM +0200, Andreas Rheinhardt wrote:
> Michael Niedermayer:
> > On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
> >> ---
> >>  libavcodec/Makefile     |  8 +++---
> >>  libavcodec/exr.c        |  2 +-
> >>  libavcodec/exrenc.c     |  2 +-
> >>  libavcodec/float2half.c | 19 +++++++++++++
> >>  libavcodec/half2float.c | 19 +++++++++++++
> >>  libavcodec/pnmdec.c     |  2 +-
> >>  libavcodec/pnmenc.c     |  2 +-
> >>  libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
> >>  libavutil/float2half.h  | 36 ++---------------------
> >>  libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
> >>  libavutil/half2float.h  | 46 ++----------------------------
> >>  11 files changed, 166 insertions(+), 86 deletions(-)
> >>  create mode 100644 libavcodec/float2half.c
> >>  create mode 100644 libavcodec/half2float.c
> >>  create mode 100644 libavutil/float2half.c
> >>  create mode 100644 libavutil/half2float.c
> >>
> >> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> >> index 029f1bad3d..cb80f73d99 100644
> >> --- a/libavcodec/Makefile
> >> +++ b/libavcodec/Makefile
> >> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
> >>  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
> >>  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
> >>  OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
> >> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
> >> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
> >> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
> >> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
> >>  OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
> >>  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
> >>  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
> >> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
> >>  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
> >>  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
> >>  OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
> >> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
> >> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
> >> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
> >> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
> >>  OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
> >>  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
> >>  OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
> >> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
> >> index 825354873d..a3582bfdd6 100644
> >> --- a/libavcodec/exr.c
> >> +++ b/libavcodec/exr.c
> >> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >>      float one_gamma = 1.0f / s->gamma;
> >>      avpriv_trc_function trc_func = NULL;
> >>  
> >> -    init_half2float_tables(&s->h2f_tables);
> >> +    ff_init_half2float_tables(&s->h2f_tables);
> > [...]
> >> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
> >> new file mode 100644
> >> index 0000000000..dba14cef5d
> >> --- /dev/null
> >> +++ b/libavutil/float2half.c
> > [...]
> >> +void ff_init_float2half_tables(float2half_tables *t)
> > 
> > this will need avpriv or break linking with shared libs
> > 
> 
> No, because this code is duplicated into all libraries that need it.
> (In case of static linking, only one of the variants will be used
> (namely the first one encountered in the link.)

libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:131: recipe for target 'ffplay_g' failed
make: *** [ffplay_g] Error 1
make: *** Waiting for unfinished jobs....
clang: error: linker command failed with exit code 1 (use -v to see invocation)
libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
Makefile:131: recipe for target 'ffprobe_g' failed
make: *** [ffprobe_g] Error 1
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:131: recipe for target 'ffmpeg_g' failed
make: *** [ffmpeg_g] Error 1


[...]
Andreas Rheinhardt Aug. 11, 2022, 9:31 p.m. UTC | #4
Michael Niedermayer:
> On Thu, Aug 11, 2022 at 10:50:10PM +0200, Andreas Rheinhardt wrote:
>> Michael Niedermayer:
>>> On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
>>>> ---
>>>>  libavcodec/Makefile     |  8 +++---
>>>>  libavcodec/exr.c        |  2 +-
>>>>  libavcodec/exrenc.c     |  2 +-
>>>>  libavcodec/float2half.c | 19 +++++++++++++
>>>>  libavcodec/half2float.c | 19 +++++++++++++
>>>>  libavcodec/pnmdec.c     |  2 +-
>>>>  libavcodec/pnmenc.c     |  2 +-
>>>>  libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
>>>>  libavutil/float2half.h  | 36 ++---------------------
>>>>  libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
>>>>  libavutil/half2float.h  | 46 ++----------------------------
>>>>  11 files changed, 166 insertions(+), 86 deletions(-)
>>>>  create mode 100644 libavcodec/float2half.c
>>>>  create mode 100644 libavcodec/half2float.c
>>>>  create mode 100644 libavutil/float2half.c
>>>>  create mode 100644 libavutil/half2float.c
>>>>
>>>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>>>> index 029f1bad3d..cb80f73d99 100644
>>>> --- a/libavcodec/Makefile
>>>> +++ b/libavcodec/Makefile
>>>> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
>>>>  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
>>>>  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
>>>>  OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
>>>> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
>>>> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
>>>> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
>>>> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
>>>>  OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
>>>>  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
>>>>  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
>>>> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
>>>>  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
>>>>  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
>>>>  OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
>>>> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
>>>> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
>>>> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
>>>> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
>>>>  OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
>>>>  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
>>>>  OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
>>>> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
>>>> index 825354873d..a3582bfdd6 100644
>>>> --- a/libavcodec/exr.c
>>>> +++ b/libavcodec/exr.c
>>>> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>>      float one_gamma = 1.0f / s->gamma;
>>>>      avpriv_trc_function trc_func = NULL;
>>>>  
>>>> -    init_half2float_tables(&s->h2f_tables);
>>>> +    ff_init_half2float_tables(&s->h2f_tables);
>>> [...]
>>>> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
>>>> new file mode 100644
>>>> index 0000000000..dba14cef5d
>>>> --- /dev/null
>>>> +++ b/libavutil/float2half.c
>>> [...]
>>>> +void ff_init_float2half_tables(float2half_tables *t)
>>>
>>> this will need avpriv or break linking with shared libs
>>>
>>
>> No, because this code is duplicated into all libraries that need it.
>> (In case of static linking, only one of the variants will be used
>> (namely the first one encountered in the link.)
> 
> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> Makefile:131: recipe for target 'ffplay_g' failed
> make: *** [ffplay_g] Error 1
> make: *** Waiting for unfinished jobs....
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> Makefile:131: recipe for target 'ffprobe_g' failed
> make: *** [ffprobe_g] Error 1
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> Makefile:131: recipe for target 'ffmpeg_g' failed
> make: *** [ffmpeg_g] Error 1
> 

That is with the whole patchset applied, isn't it!? Duplicating the init
stuff into swscale has been forgotten.

- Andreas
Michael Niedermayer Aug. 14, 2022, 7:32 p.m. UTC | #5
On Thu, Aug 11, 2022 at 11:31:32PM +0200, Andreas Rheinhardt wrote:
> Michael Niedermayer:
> > On Thu, Aug 11, 2022 at 10:50:10PM +0200, Andreas Rheinhardt wrote:
> >> Michael Niedermayer:
> >>> On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
> >>>> ---
> >>>>  libavcodec/Makefile     |  8 +++---
> >>>>  libavcodec/exr.c        |  2 +-
> >>>>  libavcodec/exrenc.c     |  2 +-
> >>>>  libavcodec/float2half.c | 19 +++++++++++++
> >>>>  libavcodec/half2float.c | 19 +++++++++++++
> >>>>  libavcodec/pnmdec.c     |  2 +-
> >>>>  libavcodec/pnmenc.c     |  2 +-
> >>>>  libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
> >>>>  libavutil/float2half.h  | 36 ++---------------------
> >>>>  libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
> >>>>  libavutil/half2float.h  | 46 ++----------------------------
> >>>>  11 files changed, 166 insertions(+), 86 deletions(-)
> >>>>  create mode 100644 libavcodec/float2half.c
> >>>>  create mode 100644 libavcodec/half2float.c
> >>>>  create mode 100644 libavutil/float2half.c
> >>>>  create mode 100644 libavutil/half2float.c
> >>>>
> >>>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
> >>>> index 029f1bad3d..cb80f73d99 100644
> >>>> --- a/libavcodec/Makefile
> >>>> +++ b/libavcodec/Makefile
> >>>> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
> >>>>  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
> >>>>  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
> >>>>  OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
> >>>> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
> >>>> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
> >>>> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
> >>>> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
> >>>>  OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
> >>>>  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
> >>>>  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
> >>>> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
> >>>>  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
> >>>>  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
> >>>>  OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
> >>>> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
> >>>> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
> >>>> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
> >>>> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
> >>>>  OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
> >>>>  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
> >>>>  OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
> >>>> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
> >>>> index 825354873d..a3582bfdd6 100644
> >>>> --- a/libavcodec/exr.c
> >>>> +++ b/libavcodec/exr.c
> >>>> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >>>>      float one_gamma = 1.0f / s->gamma;
> >>>>      avpriv_trc_function trc_func = NULL;
> >>>>  
> >>>> -    init_half2float_tables(&s->h2f_tables);
> >>>> +    ff_init_half2float_tables(&s->h2f_tables);
> >>> [...]
> >>>> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
> >>>> new file mode 100644
> >>>> index 0000000000..dba14cef5d
> >>>> --- /dev/null
> >>>> +++ b/libavutil/float2half.c
> >>> [...]
> >>>> +void ff_init_float2half_tables(float2half_tables *t)
> >>>
> >>> this will need avpriv or break linking with shared libs
> >>>
> >>
> >> No, because this code is duplicated into all libraries that need it.
> >> (In case of static linking, only one of the variants will be used
> >> (namely the first one encountered in the link.)
> > 
> > libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> > libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> > clang: error: linker command failed with exit code 1 (use -v to see invocation)
> > Makefile:131: recipe for target 'ffplay_g' failed
> > make: *** [ffplay_g] Error 1
> > make: *** Waiting for unfinished jobs....
> > clang: error: linker command failed with exit code 1 (use -v to see invocation)
> > libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> > Makefile:131: recipe for target 'ffprobe_g' failed
> > make: *** [ffprobe_g] Error 1
> > clang: error: linker command failed with exit code 1 (use -v to see invocation)
> > Makefile:131: recipe for target 'ffmpeg_g' failed
> > make: *** [ffmpeg_g] Error 1
> > 
> 
> That is with the whole patchset applied, isn't it!? Duplicating the init
> stuff into swscale has been forgotten.

Ive tried the new latest patchset and this still happens

make distclean ; ../configure --enable-shared --cc='ccache clang-6.0'  --enable-pthreads --samples=fate/fate-suite/ --enable-version3  --extra-cflags='-O1 -fno-omit-frame-pointer'  && make -j32

LD	ffmpeg_g
LD	ffplay_g
LD	ffprobe_g
libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:131: recipe for target 'ffprobe_g' failed
make: *** [ffprobe_g] Error 1
make: *** Waiting for unfinished jobs....
libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:131: recipe for target 'ffplay_g' failed
make: *** [ffplay_g] Error 1
libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:131: recipe for target 'ffmpeg_g' failed
make: *** [ffmpeg_g] Error 1

git grep ff_init_half2float_tables
libavcodec/exr.c:    ff_init_half2float_tables(&s->h2f_tables);
libavcodec/pnmdec.c:    ff_init_half2float_tables(&s->h2f_tables);
libavutil/half2float.c:void ff_init_half2float_tables(Half2FloatTables *t)
libavutil/half2float.h:void ff_init_half2float_tables(Half2FloatTables *t);
libswscale/slice.c:        ff_init_half2float_tables(c->h2f_tables);

libavcodec/half2float.c:#include "libavutil/half2float.c"
libswscale/half2float.c:#include "libavutil/half2float.c"

git grep half2float.o
libavcodec/Makefile:OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
libavcodec/Makefile:OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
libavutil/Makefile:       half2float.o                                                     \

also i tried this:
-#include "libavutil/half2float.c"
+#inklude "libavutil/half2float.c"

and still it fails at linking stage not compile, really impressive the compiler
speaks german C too


Heres the patches applied:

46e36b5371 swscale/input: add rgbaf16 input support
34446f3971 swscale: add opaque parameter to input functions
88cf148514 avutil/half2float: use native _Float16 if available
af6c41450c avutil/half2float: move non-inline init code out of header
2f2ac4c8c9 avutil/half2float: move tables to header-internal structs
19ac9a570e avutil/half2float: adjust conversion of NaN
45180741cd avutil: move half-precision float helper to avutil

(some more unrelated patches)

thx

[...]
Timo Rothenpieler Aug. 14, 2022, 9:54 p.m. UTC | #6
On 11.08.2022 23:31, Andreas Rheinhardt wrote:
> Michael Niedermayer:
>> On Thu, Aug 11, 2022 at 10:50:10PM +0200, Andreas Rheinhardt wrote:
>>> Michael Niedermayer:
>>>> On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
>>>>> ---
>>>>>   libavcodec/Makefile     |  8 +++---
>>>>>   libavcodec/exr.c        |  2 +-
>>>>>   libavcodec/exrenc.c     |  2 +-
>>>>>   libavcodec/float2half.c | 19 +++++++++++++
>>>>>   libavcodec/half2float.c | 19 +++++++++++++
>>>>>   libavcodec/pnmdec.c     |  2 +-
>>>>>   libavcodec/pnmenc.c     |  2 +-
>>>>>   libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
>>>>>   libavutil/float2half.h  | 36 ++---------------------
>>>>>   libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
>>>>>   libavutil/half2float.h  | 46 ++----------------------------
>>>>>   11 files changed, 166 insertions(+), 86 deletions(-)
>>>>>   create mode 100644 libavcodec/float2half.c
>>>>>   create mode 100644 libavcodec/half2float.c
>>>>>   create mode 100644 libavutil/float2half.c
>>>>>   create mode 100644 libavutil/half2float.c
>>>>>
>>>>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>>>>> index 029f1bad3d..cb80f73d99 100644
>>>>> --- a/libavcodec/Makefile
>>>>> +++ b/libavcodec/Makefile
>>>>> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
>>>>>   OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
>>>>>   OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
>>>>>   OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
>>>>> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
>>>>> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
>>>>> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
>>>>> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
>>>>>   OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
>>>>>   OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
>>>>>   OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
>>>>> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
>>>>>   OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
>>>>>   OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
>>>>>   OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
>>>>> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
>>>>> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
>>>>> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
>>>>> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
>>>>>   OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
>>>>>   OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
>>>>>   OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
>>>>> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
>>>>> index 825354873d..a3582bfdd6 100644
>>>>> --- a/libavcodec/exr.c
>>>>> +++ b/libavcodec/exr.c
>>>>> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>>>       float one_gamma = 1.0f / s->gamma;
>>>>>       avpriv_trc_function trc_func = NULL;
>>>>>   
>>>>> -    init_half2float_tables(&s->h2f_tables);
>>>>> +    ff_init_half2float_tables(&s->h2f_tables);
>>>> [...]
>>>>> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
>>>>> new file mode 100644
>>>>> index 0000000000..dba14cef5d
>>>>> --- /dev/null
>>>>> +++ b/libavutil/float2half.c
>>>> [...]
>>>>> +void ff_init_float2half_tables(float2half_tables *t)
>>>>
>>>> this will need avpriv or break linking with shared libs
>>>>
>>>
>>> No, because this code is duplicated into all libraries that need it.
>>> (In case of static linking, only one of the variants will be used
>>> (namely the first one encountered in the link.)
>>
>> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
>> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>> Makefile:131: recipe for target 'ffplay_g' failed
>> make: *** [ffplay_g] Error 1
>> make: *** Waiting for unfinished jobs....
>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
>> Makefile:131: recipe for target 'ffprobe_g' failed
>> make: *** [ffprobe_g] Error 1
>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>> Makefile:131: recipe for target 'ffmpeg_g' failed
>> make: *** [ffmpeg_g] Error 1
>>
> 
> That is with the whole patchset applied, isn't it!? Duplicating the init
> stuff into swscale has been forgotten.

It must have gotten lost in some rebase of the whole set.
Added back to the Makefile locally.
Andreas Rheinhardt Aug. 15, 2022, 4:20 a.m. UTC | #7
Michael Niedermayer:
> On Thu, Aug 11, 2022 at 11:31:32PM +0200, Andreas Rheinhardt wrote:
>> Michael Niedermayer:
>>> On Thu, Aug 11, 2022 at 10:50:10PM +0200, Andreas Rheinhardt wrote:
>>>> Michael Niedermayer:
>>>>> On Wed, Aug 10, 2022 at 10:47:09PM +0200, Timo Rothenpieler wrote:
>>>>>> ---
>>>>>>  libavcodec/Makefile     |  8 +++---
>>>>>>  libavcodec/exr.c        |  2 +-
>>>>>>  libavcodec/exrenc.c     |  2 +-
>>>>>>  libavcodec/float2half.c | 19 +++++++++++++
>>>>>>  libavcodec/half2float.c | 19 +++++++++++++
>>>>>>  libavcodec/pnmdec.c     |  2 +-
>>>>>>  libavcodec/pnmenc.c     |  2 +-
>>>>>>  libavutil/float2half.c  | 53 ++++++++++++++++++++++++++++++++++
>>>>>>  libavutil/float2half.h  | 36 ++---------------------
>>>>>>  libavutil/half2float.c  | 63 +++++++++++++++++++++++++++++++++++++++++
>>>>>>  libavutil/half2float.h  | 46 ++----------------------------
>>>>>>  11 files changed, 166 insertions(+), 86 deletions(-)
>>>>>>  create mode 100644 libavcodec/float2half.c
>>>>>>  create mode 100644 libavcodec/half2float.c
>>>>>>  create mode 100644 libavutil/float2half.c
>>>>>>  create mode 100644 libavutil/half2float.c
>>>>>>
>>>>>> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>>>>>> index 029f1bad3d..cb80f73d99 100644
>>>>>> --- a/libavcodec/Makefile
>>>>>> +++ b/libavcodec/Makefile
>>>>>> @@ -337,8 +337,8 @@ OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
>>>>>>  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
>>>>>>  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
>>>>>>  OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
>>>>>> -OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
>>>>>> -OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
>>>>>> +OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
>>>>>> +OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
>>>>>>  OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
>>>>>>  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
>>>>>>  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
>>>>>> @@ -570,8 +570,8 @@ OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
>>>>>>  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
>>>>>>  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
>>>>>>  OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
>>>>>> -OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
>>>>>> -OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
>>>>>> +OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
>>>>>> +OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
>>>>>>  OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
>>>>>>  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
>>>>>>  OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
>>>>>> diff --git a/libavcodec/exr.c b/libavcodec/exr.c
>>>>>> index 825354873d..a3582bfdd6 100644
>>>>>> --- a/libavcodec/exr.c
>>>>>> +++ b/libavcodec/exr.c
>>>>>> @@ -2208,7 +2208,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>>>>>      float one_gamma = 1.0f / s->gamma;
>>>>>>      avpriv_trc_function trc_func = NULL;
>>>>>>  
>>>>>> -    init_half2float_tables(&s->h2f_tables);
>>>>>> +    ff_init_half2float_tables(&s->h2f_tables);
>>>>> [...]
>>>>>> diff --git a/libavutil/float2half.c b/libavutil/float2half.c
>>>>>> new file mode 100644
>>>>>> index 0000000000..dba14cef5d
>>>>>> --- /dev/null
>>>>>> +++ b/libavutil/float2half.c
>>>>> [...]
>>>>>> +void ff_init_float2half_tables(float2half_tables *t)
>>>>>
>>>>> this will need avpriv or break linking with shared libs
>>>>>
>>>>
>>>> No, because this code is duplicated into all libraries that need it.
>>>> (In case of static linking, only one of the variants will be used
>>>> (namely the first one encountered in the link.)
>>>
>>> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
>>> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
>>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>> Makefile:131: recipe for target 'ffplay_g' failed
>>> make: *** [ffplay_g] Error 1
>>> make: *** Waiting for unfinished jobs....
>>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
>>> Makefile:131: recipe for target 'ffprobe_g' failed
>>> make: *** [ffprobe_g] Error 1
>>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>> Makefile:131: recipe for target 'ffmpeg_g' failed
>>> make: *** [ffmpeg_g] Error 1
>>>
>>
>> That is with the whole patchset applied, isn't it!? Duplicating the init
>> stuff into swscale has been forgotten.
> 
> Ive tried the new latest patchset and this still happens
> 

As explained here:
https://ffmpeg.org/pipermail/ffmpeg-devel/2022-August/300045.html, the
reason is that the patch that makes use of this in libswscale adds the
half2float.o dependency to libavutil.

> make distclean ; ../configure --enable-shared --cc='ccache clang-6.0'  --enable-pthreads --samples=fate/fate-suite/ --enable-version3  --extra-cflags='-O1 -fno-omit-frame-pointer'  && make -j32
> 
> LD	ffmpeg_g
> LD	ffplay_g
> LD	ffprobe_g
> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> Makefile:131: recipe for target 'ffprobe_g' failed
> make: *** [ffprobe_g] Error 1
> make: *** Waiting for unfinished jobs....
> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> Makefile:131: recipe for target 'ffplay_g' failed
> make: *** [ffplay_g] Error 1
> libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> Makefile:131: recipe for target 'ffmpeg_g' failed
> make: *** [ffmpeg_g] Error 1
> 
> git grep ff_init_half2float_tables
> libavcodec/exr.c:    ff_init_half2float_tables(&s->h2f_tables);
> libavcodec/pnmdec.c:    ff_init_half2float_tables(&s->h2f_tables);
> libavutil/half2float.c:void ff_init_half2float_tables(Half2FloatTables *t)
> libavutil/half2float.h:void ff_init_half2float_tables(Half2FloatTables *t);
> libswscale/slice.c:        ff_init_half2float_tables(c->h2f_tables);
> 
> libavcodec/half2float.c:#include "libavutil/half2float.c"
> libswscale/half2float.c:#include "libavutil/half2float.c"
> 
> git grep half2float.o
> libavcodec/Makefile:OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
> libavcodec/Makefile:OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
> libavutil/Makefile:       half2float.o                                                     \
> 
> also i tried this:
> -#include "libavutil/half2float.c"
> +#inklude "libavutil/half2float.c"
> 
> and still it fails at linking stage not compile, really impressive the compiler
> speaks german C too
> 

No, the libswscale/half2float.c file is just not compiled at all, see above.

> 
> Heres the patches applied:
> 
> 46e36b5371 swscale/input: add rgbaf16 input support
> 34446f3971 swscale: add opaque parameter to input functions
> 88cf148514 avutil/half2float: use native _Float16 if available
> af6c41450c avutil/half2float: move non-inline init code out of header
> 2f2ac4c8c9 avutil/half2float: move tables to header-internal structs
> 19ac9a570e avutil/half2float: adjust conversion of NaN
> 45180741cd avutil: move half-precision float helper to avutil
> 
> (some more unrelated patches)
> 
> thx
Michael Niedermayer Aug. 15, 2022, 6:09 p.m. UTC | #8
On Mon, Aug 15, 2022 at 06:20:45AM +0200, Andreas Rheinhardt wrote:
> Michael Niedermayer:
> > On Thu, Aug 11, 2022 at 11:31:32PM +0200, Andreas Rheinhardt wrote:
[...]
> > make distclean ; ../configure --enable-shared --cc='ccache clang-6.0'  --enable-pthreads --samples=fate/fate-suite/ --enable-version3  --extra-cflags='-O1 -fno-omit-frame-pointer'  && make -j32
> > 
> > LD	ffmpeg_g
> > LD	ffplay_g
> > LD	ffprobe_g
> > libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> > clang: error: linker command failed with exit code 1 (use -v to see invocation)
> > Makefile:131: recipe for target 'ffprobe_g' failed
> > make: *** [ffprobe_g] Error 1
> > make: *** Waiting for unfinished jobs....
> > libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> > clang: error: linker command failed with exit code 1 (use -v to see invocation)
> > Makefile:131: recipe for target 'ffplay_g' failed
> > make: *** [ffplay_g] Error 1
> > libswscale/libswscale.so: undefined reference to `ff_init_half2float_tables'
> > clang: error: linker command failed with exit code 1 (use -v to see invocation)
> > Makefile:131: recipe for target 'ffmpeg_g' failed
> > make: *** [ffmpeg_g] Error 1
> > 
> > git grep ff_init_half2float_tables
> > libavcodec/exr.c:    ff_init_half2float_tables(&s->h2f_tables);
> > libavcodec/pnmdec.c:    ff_init_half2float_tables(&s->h2f_tables);
> > libavutil/half2float.c:void ff_init_half2float_tables(Half2FloatTables *t)
> > libavutil/half2float.h:void ff_init_half2float_tables(Half2FloatTables *t);
> > libswscale/slice.c:        ff_init_half2float_tables(c->h2f_tables);
> > 
> > libavcodec/half2float.c:#include "libavutil/half2float.c"
> > libswscale/half2float.c:#include "libavutil/half2float.c"
> > 
> > git grep half2float.o
> > libavcodec/Makefile:OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
> > libavcodec/Makefile:OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
> > libavutil/Makefile:       half2float.o                                                     \
> > 
> > also i tried this:
> > -#include "libavutil/half2float.c"
> > +#inklude "libavutil/half2float.c"
> > 
> > and still it fails at linking stage not compile, really impressive the compiler
> > speaks german C too
> > 
> 
> No, the libswscale/half2float.c file is just not compiled at all, see above.

You seem to have a failure in humor.so

thx

[...]
diff mbox series

Patch

diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 029f1bad3d..cb80f73d99 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -337,8 +337,8 @@  OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
 OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
 OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
 OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
-OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o
-OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o
+OBJS-$(CONFIG_EXR_DECODER)             += exr.o exrdsp.o half2float.o
+OBJS-$(CONFIG_EXR_ENCODER)             += exrenc.o float2half.o
 OBJS-$(CONFIG_FASTAUDIO_DECODER)       += fastaudio.o
 OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
 OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
@@ -570,8 +570,8 @@  OBJS-$(CONFIG_PGMYUV_DECODER)          += pnmdec.o pnm.o
 OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
 OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
 OBJS-$(CONFIG_PGX_DECODER)             += pgxdec.o
-OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o
-OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o
+OBJS-$(CONFIG_PHM_DECODER)             += pnmdec.o pnm.o half2float.o
+OBJS-$(CONFIG_PHM_ENCODER)             += pnmenc.o float2half.o
 OBJS-$(CONFIG_PHOTOCD_DECODER)         += photocd.o
 OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
 OBJS-$(CONFIG_PIXLET_DECODER)          += pixlet.o
diff --git a/libavcodec/exr.c b/libavcodec/exr.c
index 825354873d..a3582bfdd6 100644
--- a/libavcodec/exr.c
+++ b/libavcodec/exr.c
@@ -2208,7 +2208,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     float one_gamma = 1.0f / s->gamma;
     avpriv_trc_function trc_func = NULL;
 
-    init_half2float_tables(&s->h2f_tables);
+    ff_init_half2float_tables(&s->h2f_tables);
 
     s->avctx              = avctx;
 
diff --git a/libavcodec/exrenc.c b/libavcodec/exrenc.c
index 6ab9400b7c..77b1ce052b 100644
--- a/libavcodec/exrenc.c
+++ b/libavcodec/exrenc.c
@@ -94,7 +94,7 @@  static av_cold int encode_init(AVCodecContext *avctx)
 {
     EXRContext *s = avctx->priv_data;
 
-    init_float2half_tables(&s->f2h_tables);
+    ff_init_float2half_tables(&s->f2h_tables);
 
     switch (avctx->pix_fmt) {
     case AV_PIX_FMT_GBRPF32:
diff --git a/libavcodec/float2half.c b/libavcodec/float2half.c
new file mode 100644
index 0000000000..90a6f63fac
--- /dev/null
+++ b/libavcodec/float2half.c
@@ -0,0 +1,19 @@ 
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/float2half.c"
diff --git a/libavcodec/half2float.c b/libavcodec/half2float.c
new file mode 100644
index 0000000000..1b023f96a5
--- /dev/null
+++ b/libavcodec/half2float.c
@@ -0,0 +1,19 @@ 
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/half2float.c"
diff --git a/libavcodec/pnmdec.c b/libavcodec/pnmdec.c
index 6adc348ec8..fbed282e93 100644
--- a/libavcodec/pnmdec.c
+++ b/libavcodec/pnmdec.c
@@ -477,7 +477,7 @@  static av_cold int phm_dec_init(AVCodecContext *avctx)
 {
     PNMContext *s = avctx->priv_data;
 
-    init_half2float_tables(&s->h2f_tables);
+    ff_init_half2float_tables(&s->h2f_tables);
 
     return 0;
 }
diff --git a/libavcodec/pnmenc.c b/libavcodec/pnmenc.c
index 70992531bf..50f55bb1b9 100644
--- a/libavcodec/pnmenc.c
+++ b/libavcodec/pnmenc.c
@@ -294,7 +294,7 @@  static av_cold int phm_enc_init(AVCodecContext *avctx)
 {
     PHMEncContext *s = avctx->priv_data;
 
-    init_float2half_tables(&s->f2h_tables);
+    ff_init_float2half_tables(&s->f2h_tables);
 
     return 0;
 }
diff --git a/libavutil/float2half.c b/libavutil/float2half.c
new file mode 100644
index 0000000000..dba14cef5d
--- /dev/null
+++ b/libavutil/float2half.c
@@ -0,0 +1,53 @@ 
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/float2half.h"
+
+void ff_init_float2half_tables(float2half_tables *t)
+{
+    for (int i = 0; i < 256; i++) {
+        int e = i - 127;
+
+        if (e < -24) { // Very small numbers map to zero
+            t->basetable[i|0x000]  = 0x0000;
+            t->basetable[i|0x100]  = 0x8000;
+            t->shifttable[i|0x000] = 24;
+            t->shifttable[i|0x100] = 24;
+        } else if (e < -14) { // Small numbers map to denorms
+            t->basetable[i|0x000] = (0x0400>>(-e-14));
+            t->basetable[i|0x100] = (0x0400>>(-e-14)) | 0x8000;
+            t->shifttable[i|0x000] = -e-1;
+            t->shifttable[i|0x100] = -e-1;
+        } else if (e <= 15) { // Normal numbers just lose precision
+            t->basetable[i|0x000] = ((e + 15) << 10);
+            t->basetable[i|0x100] = ((e + 15) << 10) | 0x8000;
+            t->shifttable[i|0x000] = 13;
+            t->shifttable[i|0x100] = 13;
+        } else if (e < 128) { // Large numbers map to Infinity
+            t->basetable[i|0x000]  = 0x7C00;
+            t->basetable[i|0x100]  = 0xFC00;
+            t->shifttable[i|0x000] = 24;
+            t->shifttable[i|0x100] = 24;
+        } else { // Infinity and NaN's stay Infinity and NaN's
+            t->basetable[i|0x000]  = 0x7C00;
+            t->basetable[i|0x100]  = 0xFC00;
+            t->shifttable[i|0x000] = 13;
+            t->shifttable[i|0x100] = 13;
+        }
+    }
+}
diff --git a/libavutil/float2half.h b/libavutil/float2half.h
index 9252560649..b8c9cdfc4f 100644
--- a/libavutil/float2half.h
+++ b/libavutil/float2half.h
@@ -26,41 +26,9 @@  typedef struct float2half_tables {
     uint8_t shifttable[512];
 } float2half_tables;
 
-static void init_float2half_tables(float2half_tables *t)
-{
-    for (int i = 0; i < 256; i++) {
-        int e = i - 127;
-
-        if (e < -24) { // Very small numbers map to zero
-            t->basetable[i|0x000]  = 0x0000;
-            t->basetable[i|0x100]  = 0x8000;
-            t->shifttable[i|0x000] = 24;
-            t->shifttable[i|0x100] = 24;
-        } else if (e < -14) { // Small numbers map to denorms
-            t->basetable[i|0x000] = (0x0400>>(-e-14));
-            t->basetable[i|0x100] = (0x0400>>(-e-14)) | 0x8000;
-            t->shifttable[i|0x000] = -e-1;
-            t->shifttable[i|0x100] = -e-1;
-        } else if (e <= 15) { // Normal numbers just lose precision
-            t->basetable[i|0x000] = ((e + 15) << 10);
-            t->basetable[i|0x100] = ((e + 15) << 10) | 0x8000;
-            t->shifttable[i|0x000] = 13;
-            t->shifttable[i|0x100] = 13;
-        } else if (e < 128) { // Large numbers map to Infinity
-            t->basetable[i|0x000]  = 0x7C00;
-            t->basetable[i|0x100]  = 0xFC00;
-            t->shifttable[i|0x000] = 24;
-            t->shifttable[i|0x100] = 24;
-        } else { // Infinity and NaN's stay Infinity and NaN's
-            t->basetable[i|0x000]  = 0x7C00;
-            t->basetable[i|0x100]  = 0xFC00;
-            t->shifttable[i|0x000] = 13;
-            t->shifttable[i|0x100] = 13;
-        }
-    }
-}
+void ff_init_float2half_tables(float2half_tables *t);
 
-static uint16_t float2half(uint32_t f, const float2half_tables *t)
+static inline uint16_t float2half(uint32_t f, const float2half_tables *t)
 {
     uint16_t h;
 
diff --git a/libavutil/half2float.c b/libavutil/half2float.c
new file mode 100644
index 0000000000..baac8e4093
--- /dev/null
+++ b/libavutil/half2float.c
@@ -0,0 +1,63 @@ 
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/half2float.h"
+
+static uint32_t convertmantissa(uint32_t i)
+{
+    int32_t m = i << 13; // Zero pad mantissa bits
+    int32_t e = 0; // Zero exponent
+
+    while (!(m & 0x00800000)) { // While not normalized
+        e -= 0x00800000; // Decrement exponent (1<<23)
+        m <<= 1; // Shift mantissa
+    }
+
+    m &= ~0x00800000; // Clear leading 1 bit
+    e +=  0x38800000; // Adjust bias ((127-14)<<23)
+
+    return m | e; // Return combined number
+}
+
+void ff_init_half2float_tables(half2float_tables *t)
+{
+    t->mantissatable[0] = 0;
+    for (int i = 1; i < 1024; i++)
+        t->mantissatable[i] = convertmantissa(i);
+    for (int i = 1024; i < 2048; i++)
+        t->mantissatable[i] = 0x38000000UL + ((i - 1024) << 13UL);
+    for (int i = 2048; i < 3072; i++)
+        t->mantissatable[i] = t->mantissatable[i - 1024] | 0x400000UL;
+    t->mantissatable[2048] = t->mantissatable[1024];
+
+    t->exponenttable[0] = 0;
+    for (int i = 1; i < 31; i++)
+        t->exponenttable[i] = i << 23;
+    for (int i = 33; i < 63; i++)
+        t->exponenttable[i] = 0x80000000UL + ((i - 32) << 23UL);
+    t->exponenttable[31]= 0x47800000UL;
+    t->exponenttable[32]= 0x80000000UL;
+    t->exponenttable[63]= 0xC7800000UL;
+
+    t->offsettable[0] = 0;
+    for (int i = 1; i < 64; i++)
+        t->offsettable[i] = 1024;
+    t->offsettable[31] = 2048;
+    t->offsettable[32] = 0;
+    t->offsettable[63] = 2048;
+}
diff --git a/libavutil/half2float.h b/libavutil/half2float.h
index 10b6fef4e6..cb58e44a1c 100644
--- a/libavutil/half2float.h
+++ b/libavutil/half2float.h
@@ -27,51 +27,9 @@  typedef struct half2float_tables {
     uint16_t offsettable[64];
 } half2float_tables;
 
-static uint32_t convertmantissa(uint32_t i)
-{
-    int32_t m = i << 13; // Zero pad mantissa bits
-    int32_t e = 0; // Zero exponent
-
-    while (!(m & 0x00800000)) { // While not normalized
-        e -= 0x00800000; // Decrement exponent (1<<23)
-        m <<= 1; // Shift mantissa
-    }
-
-    m &= ~0x00800000; // Clear leading 1 bit
-    e +=  0x38800000; // Adjust bias ((127-14)<<23)
-
-    return m | e; // Return combined number
-}
-
-static void init_half2float_tables(half2float_tables *t)
-{
-    t->mantissatable[0] = 0;
-    for (int i = 1; i < 1024; i++)
-        t->mantissatable[i] = convertmantissa(i);
-    for (int i = 1024; i < 2048; i++)
-        t->mantissatable[i] = 0x38000000UL + ((i - 1024) << 13UL);
-    for (int i = 2048; i < 3072; i++)
-        t->mantissatable[i] = t->mantissatable[i - 1024] | 0x400000UL;
-    t->mantissatable[2048] = t->mantissatable[1024];
-
-    t->exponenttable[0] = 0;
-    for (int i = 1; i < 31; i++)
-        t->exponenttable[i] = i << 23;
-    for (int i = 33; i < 63; i++)
-        t->exponenttable[i] = 0x80000000UL + ((i - 32) << 23UL);
-    t->exponenttable[31]= 0x47800000UL;
-    t->exponenttable[32]= 0x80000000UL;
-    t->exponenttable[63]= 0xC7800000UL;
-
-    t->offsettable[0] = 0;
-    for (int i = 1; i < 64; i++)
-        t->offsettable[i] = 1024;
-    t->offsettable[31] = 2048;
-    t->offsettable[32] = 0;
-    t->offsettable[63] = 2048;
-}
+void ff_init_half2float_tables(half2float_tables *t);
 
-static uint32_t half2float(uint16_t h, const half2float_tables *t)
+static inline uint32_t half2float(uint16_t h, const half2float_tables *t)
 {
     uint32_t f;