37 #define classic_shift_luma_table_size 42 39 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
40 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
41 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0
44 #define classic_shift_chroma_table_size 59 46 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
47 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
48 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
49 78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0
53 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
54 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
55 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
56 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
57 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
58 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
59 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
60 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
61 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
62 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
63 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
64 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
65 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
66 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
67 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
68 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
72 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
73 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
74 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
75 43, 45, 76, 81, 46, 82, 75, 55, 56, 144, 58, 80, 60, 74, 147, 63,
76 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
77 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
78 17, 14, 5, 6, 100, 54, 47, 50, 51, 53, 106, 107, 108, 109, 110, 111,
79 112, 113, 114, 115, 4, 117, 118, 92, 94, 121, 122, 3, 124, 103, 2, 1,
80 0, 129, 130, 131, 120, 119, 126, 125, 136, 137, 138, 139, 140, 141, 142, 134,
81 135, 132, 133, 104, 64, 101, 62, 57, 102, 95, 93, 59, 61, 28, 97, 96,
82 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
83 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
84 7, 128, 127, 105, 123, 116, 35, 34, 33, 145, 31, 79, 42, 146, 78, 26,
85 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
86 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
87 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
94 for (i = 0; i < 256;) {
118 for (p = 0; p < 3; p++) {
119 for (i = y = 0; y < 256; y++) {
120 int len0 = s->
len[0][y];
124 for (u = 0; u < 256; u++) {
125 int len1 = s->
len[p][u];
128 len[i] = len0 + len1;
129 bits[i] = (s->
bits[0][y] << len1) + s->
bits[p][u];
130 symbols[i] = (y << 8) + u;
131 if (symbols[i] != 0xffff)
137 bits, 2, 2, symbols, 2, 2, 0)) < 0)
142 int i,
b,
g,
r, code;
148 for (i = 0,
g = -16;
g < 16;
g++) {
149 int len0 = s->
len[p0][
g & 255];
153 for (
b = -16;
b < 16;
b++) {
154 int len1 = s->
len[p1][
b & 255];
155 int limit1 = limit0 - len1;
158 code = (s->
bits[p0][
g & 255] << len1) + s->
bits[p1][
b & 255];
159 for (
r = -16;
r < 16;
r++) {
160 int len2 = s->
len[2][
r & 255];
163 len[i] = len0 + len1 + len2;
164 bits[i] = (code << len2) + s->
bits[2][
r & 255];
194 for (i = 0; i < 3; i++) {
201 s->
bits[i], 4, 4, 0)) < 0)
228 for (i = 0; i < 256; i++)
230 for (i = 0; i < 256; i++)
234 memcpy(s->
bits[1], s->
bits[0], 256 *
sizeof(uint32_t));
237 memcpy(s->
bits[2], s->
bits[1], 256 *
sizeof(uint32_t));
240 for (i = 0; i < 3; i++) {
243 s->
bits[i], 4, 4, 0)) < 0)
260 memset(s->
vlc, 0, 3 *
sizeof(
VLC));
275 int method, interlace;
286 interlace = (avctx->
extradata[2] & 0x30) >> 4;
347 "for this combination of colorspace and predictor type.\n");
365 for (i = 0; i < 6; i++)
382 #define READ_2PIX(dst0, dst1, plane1) \ 384 uint16_t code = get_vlc2(&s->gb, s->vlc[3 + plane1].table, \ 386 if (code != 0xffff) { \ 390 dst0 = get_vlc2(&s->gb, s->vlc[0].table, VLC_BITS, 3); \ 391 dst1 = get_vlc2(&s->gb, s->vlc[plane1].table, VLC_BITS, 3); \ 407 for (i = 0; i < count; i++) {
425 for (i = 0; i < count; i++) {
435 for (i = 0; i < count; i++) {
439 }
else if (decorrelate) {
442 s->
temp[0][4 * i +
G];
444 s->
temp[0][4 * i +
G];
487 offset[1] = frame->
linesize[1] * cy;
488 offset[2] = frame->
linesize[2] * cy;
502 int buf_size = avpkt->
size;
505 const int width2 = s->
width >> 1;
507 int fake_ystride, fake_ustride, fake_vstride;
510 int table_size = 0, ret;
520 (
const uint32_t *) buf, buf_size / 4);
533 if ((
unsigned) (buf_size - table_size) >= INT_MAX / 8)
537 (buf_size - table_size) * 8)) < 0)
548 int lefty, leftu, leftv;
549 int lefttopy, lefttopu, lefttopv;
579 for (cy = y = 1; y < s->
height; y++, cy++) {
640 s->
temp[0], width, lefty);
652 s->
temp[0], 4, lefty);
659 lefttopy = p->
data[0][3];
663 width - 4, &lefty, &lefttopy);
665 lefttopu = p->
data[1][1];
666 lefttopv = p->
data[2][1];
673 for (; y <
height; y++, cy++) {
711 int leftr, leftg, leftb, lefta;
712 const int last_line = (height - 1) * p->
linesize[0];
723 lefta = p->
data[0][last_line +
A] = 255;
733 s->
temp[0], width - 1, &leftr,
734 &leftg, &leftb, &lefta);
736 for (y = s->
height - 2; y >= 0; y--) {
740 s->
temp[0], width, &leftr,
741 &leftg, &leftb, &lefta);
749 fake_ystride, fake_ystride);
758 "prediction type not supported!\n");
780 for (i = 0; i < 6; i++)
800 #if CONFIG_FFVHUFF_DECODER
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_NUM_DATA_POINTERS
This structure describes decoded (raw) audio or video data.
void(* add_bytes)(uint8_t *dst, uint8_t *src, int w)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void decode_422_bitstream(HYuvContext *s, int count)
static av_always_inline void decode_bgr_1(HYuvContext *s, int count, int decorrelate, int alpha)
av_cold void ff_huffyuvdsp_init(HuffYUVDSPContext *c)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static int read_len_table(uint8_t *dst, GetBitContext *gb)
static av_cold int decode_init_thread_copy(AVCodecContext *avctx)
unsigned int bitstream_buffer_size
void ff_huffyuv_common_end(HYuvContext *s)
static int generate_joint_tables(HYuvContext *s)
void(* draw_horiz_band)(struct AVCodecContext *s, const AVFrame *src, int offset[AV_NUM_DATA_POINTERS], int y, int type, int height)
If non NULL, 'draw_horiz_band' is called by the libavcodec decoder to draw a horizontal band...
#define READ_2PIX(dst0, dst1, plane1)
static int read_old_huffman_tables(HYuvContext *s)
static void draw_slice(HYuvContext *s, AVFrame *frame, int y)
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
uint32_t pix_bgr_map[1<< VLC_BITS]
int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
void(* bswap_buf)(uint32_t *dst, const uint32_t *src, int w)
static void decode_bgr_bitstream(HYuvContext *s, int count)
Multithreading support functions.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
void(* add_hfyu_median_pred)(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int w, int *left, int *left_top)
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
av_cold int ff_huffyuv_alloc_temp(HYuvContext *s)
static int get_bits_left(GetBitContext *gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const unsigned char classic_add_luma[256]
uint8_t * bitstream_buffer
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
huffyuv codec for libavcodec.
#define classic_shift_chroma_table_size
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
#define init_vlc(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
static const unsigned char classic_shift_luma[classic_shift_luma_table_size+FF_INPUT_BUFFER_PADDING_SIZE]
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
int width
picture width / height.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
packed RGB 8:8:8, 24bpp, BGRBGR...
int(* add_hfyu_left_pred)(uint8_t *dst, const uint8_t *src, int w, int left)
static const unsigned char classic_shift_chroma[classic_shift_chroma_table_size+FF_INPUT_BUFFER_PADDING_SIZE]
static int decorrelate(TAKDecContext *s, int c1, int c2, int length)
if(ac->has_optimized_func)
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
AVCodec ff_huffyuv_decoder
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
main external API structure.
static void close(AVCodecParserContext *s)
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static void decode_gray_bitstream(HYuvContext *s, int count)
#define classic_shift_luma_table_size
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static av_cold int decode_init(AVCodecContext *avctx)
void(* add_hfyu_left_pred_bgr32)(uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue, int *alpha)
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
#define CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
#define CODEC_FLAG_GRAY
Only decode/encode grayscale.
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static av_cold int init(AVCodecParserContext *s)
av_cold void ff_huffyuv_common_init(AVCodecContext *avctx)
static av_cold int decode_end(AVCodecContext *avctx)
static const unsigned char classic_add_chroma[256]
VLC_TYPE(* table)[2]
code, bits
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
static int read_huffman_tables(HYuvContext *s, const uint8_t *src, int length)
int ff_huffyuv_generate_bits_table(uint32_t *dst, const uint8_t *len_table)