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 |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
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 [...]
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
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 [...]
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
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 [...]
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.
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
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 --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;