2018-12-17 21:35 GMT+01:00, Rostislav Pehlivanov <atomnu...@gmail.com>: > On Mon, 17 Dec 2018 at 01:47, Carl Eugen Hoyos <ceffm...@gmail.com> wrote: > >> Hi! >> >> The Opus struct RawBitsContext is used in both the decoder and the >> encoder. >> The fact that *position is const avoids warnings in the decoder where >> it points into the bitstream. The encoder writes into the same >> pointer, attached cast silences the warning on targets where AV_WB32() >> does not internally cast the qualifier away. >> >> It is also possible to use a union if anybody prefers this: >> diff --git a/libavcodec/opus_rc.h b/libavcodec/opus_rc.h >> index 627f832..baad4ce 100644 >> --- a/libavcodec/opus_rc.h >> +++ b/libavcodec/opus_rc.h >> @@ -37,9 +37,19 @@ typedef struct RawBitsContext { >> uint32_t cacheval; >> } RawBitsContext; >> >> +typedef struct RawBitsEncContext { >> + uint8_t *position; >> + uint32_t bytes; >> + uint32_t cachelen; >> + uint32_t cacheval; >> +} RawBitsEncContext; >> + >> typedef struct OpusRangeCoder { >> GetBitContext gb; >> - RawBitsContext rb; >> + union { >> + RawBitsContext rb; >> + RawBitsEncContext rbe; >> + }; >> uint32_t range; >> uint32_t value; >> uint32_t total_bits; >> >> and use rbe in ff_opus_rc_put_raw().
> NAK, we don't do anyonymous unions. The suggested patch does not contain unions. > To silence the warning the const can be > just removed, No, the original data comes from a const pointer. > but I've never seen a single warning on platforms I've tried. It is shown on platforms where an optimized function (instead of the default macro) for AV_RW32() exists, for example Android arm. Carl Eugen _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel