/*
* Copyright (c) 2002-2014 Michael Niedermayer <michaelni@gmx.at>
*
- * see http://www.pcisys.net/~melanson/codecs/huffyuv.txt for a description of
+ * see https://multimedia.cx/huffyuv.txt for a description of
* the algorithm used
*
* This file is part of FFmpeg.
#include <stdint.h>
-#include "avcodec.h"
-#include "bswapdsp.h"
-#include "get_bits.h"
-#include "huffyuvdsp.h"
-#include "huffyuvencdsp.h"
-#include "put_bits.h"
-#include "lossless_videodsp.h"
-#include "lossless_videoencdsp.h"
+#include "config.h"
-#define VLC_BITS 12
+#if HAVE_BIGENDIAN
+#define B 3
+#define G 2
+#define R 1
+#define A 0
+#else
+#define B 0
+#define G 1
+#define R 2
+#define A 3
+#endif
#define MAX_BITS 16
#define MAX_N (1<<MAX_BITS)
MEDIAN,
} Predictor;
-typedef struct HYuvContext {
- AVClass *class;
- AVCodecContext *avctx;
- Predictor predictor;
- GetBitContext gb;
- PutBitContext pb;
- int interlaced;
- int decorrelate;
- int bitstream_bpp;
- int version;
- int yuy2; //use yuy2 instead of 422P
- int bgr32; //use bgr32 instead of bgr24
- int bps;
- int n; // 1<<bps
- int vlc_n; // number of vlc codes (FFMIN(1<<bps, MAX_VLC_N))
- int alpha;
- int chroma;
- int yuv;
- int chroma_h_shift;
- int chroma_v_shift;
- int width, height;
- int flags;
- int context;
- int picture_number;
- int last_slice_end;
- uint8_t *temp[3];
- uint16_t *temp16[3]; ///< identical to temp but 16bit type
- uint64_t stats[4][MAX_VLC_N];
- uint8_t len[4][MAX_VLC_N];
- uint32_t bits[4][MAX_VLC_N];
- uint32_t pix_bgr_map[1<<VLC_BITS];
- VLC vlc[8]; //Y,U,V,A,YY,YU,YV,AA
- uint8_t *bitstream_buffer;
- unsigned int bitstream_buffer_size;
- BswapDSPContext bdsp;
- HuffYUVDSPContext hdsp;
- HuffYUVEncDSPContext hencdsp;
- LLVidDSPContext llviddsp;
- LLVidEncDSPContext llvidencdsp;
- int non_determ; // non-deterministic, multi-threaded encoder allowed
-} HYuvContext;
-
-void ff_huffyuv_common_init(AVCodecContext *s);
-void ff_huffyuv_common_end(HYuvContext *s);
-int ff_huffyuv_alloc_temp(HYuvContext *s);
+void ff_huffyuv_common_end(uint8_t *temp[3], uint16_t *temp16[3]);
+int ff_huffyuv_alloc_temp(uint8_t *temp[3], uint16_t *temp16[3], int width);
int ff_huffyuv_generate_bits_table(uint32_t *dst, const uint8_t *len_table, int n);
#endif /* AVCODEC_HUFFYUV_H */