[FFmpeg-devel] [PATCH 2/9] avcodec/opustab: Avoid indirection to access ff_celt_window

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Tue Oct 4 15:18:04 EEST 2022


Michael Niedermayer:
> On Tue, Oct 04, 2022 at 12:44:58AM +0200, Andreas Rheinhardt wrote:
>> Currently, it is accessed via a pointer (ff_celt_window)
>> exported from opustab.h which points inside a static array
>> (ff_celt_window_padded) in opustab.h. Instead export
>> ff_celt_window_padded directly and make opustab.h
>> a static const pointer pointing inside ff_celt_window_padded.
>> Also mark all the declarations in opustab.h as hidden,
>> so that the compiler knows that ff_celt_window has a fixed
>> offset from the code even when compiling position-independent
>> code.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
>> ---
>>  libavcodec/opusenc.c | 4 ++--
>>  libavcodec/opustab.c | 4 +---
>>  libavcodec/opustab.h | 8 +++++++-
>>  3 files changed, 10 insertions(+), 6 deletions(-)
> [...]
>> diff --git a/libavcodec/opustab.h b/libavcodec/opustab.h
>> index 16011db758..9c9f1b9d98 100644
>> --- a/libavcodec/opustab.h
>> +++ b/libavcodec/opustab.h
>> @@ -25,6 +25,9 @@
>>  
>>  #include <stdint.h>
>>  
>> +#include "libavutil/attributes_internal.h"
>> +
>> +FF_VISIBILITY_PUSH_HIDDEN
>>  extern const uint8_t  ff_celt_band_end[];
>>  
>>  extern const uint8_t  ff_opus_default_coupled_streams[];
> 
> didnt investigate but this breaks mingw64 here
> 
> CC	libavcodec/opus.o
> In file included from src/libavcodec/opus.c:34:0:
> src/libavcodec/opustab.h:31:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘extern’
>  extern const uint8_t  ff_celt_band_end[];
>  ^~~~~~
> In file included from src/libavcodec/opus.c:35:0:
> src/libavcodec/internal.h:52:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef’
>  typedef struct AVCodecInternal {
>  ^~~~~~~
> src/libavcodec/opus.c: In function ‘ff_opus_parse_extradata’:
> src/libavcodec/opus.c:333:24: error: ‘struct AVCodecInternal’ has no member named ‘skip_samples’
>          avctx->internal->skip_samples = avctx->delay;
>                         ^~
> src/ffbuild/common.mak:81: recipe for target 'libavcodec/opus.o' failed
> make: *** [libavcodec/opus.o] Error 1
> 
> 

I already see the problem: An earlier version used
FF_VISIBILITY_START/END_HIDDEN, then I decided to switch to
FF_VISIBILITY_PUSH/POP_HIDDEN, but I only modified the part where hidden
is supported; in the other case, FF_VISIBILITY_START/END_HIDDEN is still
defined.
Thanks for testing.

- Andreas



More information about the ffmpeg-devel mailing list