Quoting Vittorio Giovara (2015-02-05 14:50:11)
> Based on work by Kostya Shishkov <[email protected]>.
> ---
> Changelog | 1 +
> doc/general.texi | 1 +
> libavcodec/Makefile | 1 +
> libavcodec/allcodecs.c | 1 +
> libavcodec/avcodec.h | 1 +
> libavcodec/codec_desc.c | 7 +
> libavcodec/hqx.c | 627 ++++++++++++
> libavcodec/hqxvlc.c | 2182
> ++++++++++++++++++++++++++++++++++++++++
> libavcodec/hqxvlc.h | 55 +
> libavcodec/version.h | 2 +-
> libavformat/riff.c | 1 +
> tests/fate/video.mak | 9 +
> tests/ref/fate/canopus-hqx422 | 2 +
> tests/ref/fate/canopus-hqx422a | 2 +
> 14 files changed, 2891 insertions(+), 1 deletion(-)
> create mode 100644 libavcodec/hqx.c
> create mode 100644 libavcodec/hqxvlc.c
> create mode 100644 libavcodec/hqxvlc.h
> create mode 100644 tests/ref/fate/canopus-hqx422
> create mode 100644 tests/ref/fate/canopus-hqx422a
>
> +static int hqx_decode_frame(AVCodecContext *avctx, void *data,
> + int *got_picture_ptr, AVPacket *avpkt)
> +{
> + HQXContext *ctx = avctx->priv_data;
> + AVFrame *pic = data;
> + uint8_t *src = avpkt->data;
> + uint32_t info_tag, info_offset;
> + int data_start;
> + unsigned data_size;
> + GetBitContext gb;
> + int i, ret;
> + int slice;
> + uint32_t slice_off[17];
> + mb_decode_func decode_func = 0;
> +
> + /* Skip the INFO header if present */
> + info_offset = 0;
> + info_tag = AV_RL32(src);
> + if (info_tag == MKTAG('I', 'N', 'F', 'O')) {
> + info_offset = AV_RL32(src + 4);
This read and the one above it are unchecked.
> +av_cold void ff_hqx_init_vlcs(void)
> +{
> + static int initialised = 0;
> + int vlc_idx = 0;
> +
> + if (initialised)
> + return;
Could this be easily done without global state? I know every other codec
does it like this, but we should really stop doing that.
--
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel