36 #define classic_shift_luma_table_size 42
38 34,36,35,69,135,232,9,16,10,24,11,23,12,16,13,10,14,8,15,8,
39 16,8,17,20,16,10,207,206,205,236,11,8,10,21,9,23,8,8,199,70,
43 #define classic_shift_chroma_table_size 59
45 66,36,37,38,39,40,41,75,76,77,110,239,144,81,82,83,84,85,118,183,
46 56,57,88,89,56,89,154,57,58,57,26,141,57,56,58,57,58,57,184,119,
47 214,245,116,83,82,49,80,79,78,77,44,75,41,40,39,38,37,36,34, 0
51 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37,
52 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36,
53 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36,
54 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39,
55 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37,
56 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29,
57 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16,
58 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14,
59 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6,
60 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15,
61 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25,
62 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49,
63 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60,
64 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52,
65 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43,
66 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8,
70 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9,
71 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7,
72 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77,
73 43, 45, 76, 81, 46, 82, 75, 55, 56,144, 58, 80, 60, 74,147, 63,
74 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
75 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22,
76 17, 14, 5, 6,100, 54, 47, 50, 51, 53,106,107,108,109,110,111,
77 112,113,114,115, 4,117,118, 92, 94,121,122, 3,124,103, 2, 1,
78 0,129,130,131,120,119,126,125,136,137,138,139,140,141,142,134,
79 135,132,133,104, 64,101, 62, 57,102, 95, 93, 59, 61, 28, 97, 96,
80 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41,
81 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36,
82 7,128,127,105,123,116, 35, 34, 33,145, 31, 79, 42,146, 78, 26,
83 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13,
84 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8,
85 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2,
92 for (i = 0; i < 256;) {
116 for (p = 0; p < 3; p++) {
117 for (i = y = 0; y < 256; y++) {
118 int len0 = s->
len[0][y];
122 for (u = 0; u < 256; u++) {
123 int len1 = s->
len[p][u];
126 len[i] = len0 + len1;
127 bits[i] = (s->
bits[0][y] << len1) + s->
bits[p][u];
128 symbols[i] = (y << 8) + u;
129 if(symbols[i] != 0xffff)
135 bits, 2, 2, symbols, 2, 2, 0)) < 0)
140 int i,
b,
g,
r, code;
146 for (i = 0,
g = -16;
g < 16;
g++) {
147 int len0 = s->
len[p0][
g & 255];
151 for (
b = -16;
b < 16;
b++) {
152 int len1 = s->
len[p1][
b & 255];
153 int limit1 = limit0 - len1;
156 code = (s->
bits[p0][
g & 255] << len1) + s->
bits[p1][
b & 255];
157 for (
r = -16;
r < 16;
r++) {
158 int len2 = s->
len[2][
r & 255];
161 len[i] = len0 + len1 + len2;
162 bits[i] = (code << len2) + s->
bits[2][
r & 255];
192 for (i = 0; i < 3; i++) {
199 s->
bits[i], 4, 4, 0)) < 0)
230 memcpy(s->
bits[1], s->
bits[0], 256 *
sizeof(uint32_t));
233 memcpy(s->
bits[2], s->
bits[1], 256 *
sizeof(uint32_t));
236 for (i = 0; i < 3; i++) {
239 s->
bits[i], 4, 4, 0)) < 0)
255 memset(s->
vlc, 0, 3 *
sizeof(
VLC));
271 int method, interlace;
356 for (i = 0; i < 6; i++)
373 #define READ_2PIX(dst0, dst1, plane1){\
374 uint16_t code = get_vlc2(&s->gb, s->vlc[3+plane1].table, VLC_BITS, 1);\
379 dst0 = get_vlc2(&s->gb, s->vlc[0].table, VLC_BITS, 3);\
380 dst1 = get_vlc2(&s->gb, s->vlc[plane1].table, VLC_BITS, 3);\
396 for (i = 0; i < count; i++) {
414 for(i=0; i<count; i++){
424 for (i = 0; i < count; i++) {
428 }
else if(decorrelate) {
431 s->
temp[0][4 * i +
G];
433 s->
temp[0][4 * i +
G];
477 offset[1] = frame->
linesize[1] * cy;
478 offset[2] = frame->
linesize[2] * cy;
492 int buf_size = avpkt->
size;
495 const int width2 = s->
width>>1;
497 int fake_ystride, fake_ustride, fake_vstride;
500 int table_size = 0, ret;
510 (
const uint32_t*)buf, buf_size / 4);
523 if ((
unsigned)(buf_size-table_size) >= INT_MAX / 8)
527 (buf_size - table_size) * 8)) < 0)
538 int lefty, leftu, leftv;
539 int lefttopy, lefttopu, lefttopv;
548 "YUY2 output is not implemented yet\n");
567 for (cy = y = 1; y < s->
height; y++, cy++) {
581 if (y >= s->
height)
break;
640 lefttopy = p->
data[0][3];
644 lefttopu = p->
data[1][1];
645 lefttopv = p->
data[2][1];
651 for (; y<
height; y++, cy++) {
661 if (y >= height)
break;
684 int leftr, leftg, leftb, lefta;
685 const int last_line = (height - 1) * p->
linesize[0];
696 lefta = p->
data[0][last_line+
A] = 255;
707 for (y = s->
height - 2; y >= 0; y--) {
717 fake_ystride, fake_ystride);
726 "prediction type not supported!\n");
730 "BGR24 output is not implemented yet\n");
749 for (i = 0; i < 6; i++) {
756 #if CONFIG_HUFFYUV_DECODER
772 #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_hfyu_left_prediction_bgr32)(uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue, int *alpha)
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)
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)
#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)
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_bytes)(uint8_t *dst, uint8_t *src, int w)
#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]
void(* bswap_buf)(uint32_t *dst, const uint32_t *src, int w)
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,...)
int(* add_hfyu_left_prediction)(uint8_t *dst, const uint8_t *src, int w, int left)
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.
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...
void(* add_hfyu_median_prediction)(uint8_t *dst, const uint8_t *top, const uint8_t *diff, int w, int *left, int *left_top)
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 CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
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...
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)
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
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
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
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static av_cold int decode_init(AVCodecContext *avctx)
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)