huffyuv codec for libavcodec. More...
#include "avcodec.h"
#include "get_bits.h"
#include "put_bits.h"
#include "dsputil.h"
#include "thread.h"
Go to the source code of this file.
Data Structures | |
struct | HYuvContext |
struct | HeapElem |
Defines | |
#define | VLC_BITS 11 |
#define | B 0 |
#define | G 1 |
#define | R 2 |
#define | A 3 |
#define | classic_shift_luma_table_size 42 |
#define | classic_shift_chroma_table_size 59 |
#define | READ_2PIX(dst0, dst1, plane1) |
#define | LOAD4 |
#define | LOAD2 |
#define | STAT2 |
#define | WRITE2 |
#define | LOAD3 |
#define | STAT3 |
#define | WRITE3 |
Typedefs | |
typedef enum Predictor | Predictor |
typedef struct HYuvContext | HYuvContext |
Enumerations | |
enum | Predictor { LEFT = 0, PLANE, MEDIAN } |
Functions | |
static int | sub_left_prediction (HYuvContext *s, uint8_t *dst, uint8_t *src, int w, int left) |
static void | sub_left_prediction_bgr32 (HYuvContext *s, uint8_t *dst, uint8_t *src, int w, int *red, int *green, int *blue, int *alpha) |
static void | sub_left_prediction_rgb24 (HYuvContext *s, uint8_t *dst, uint8_t *src, int w, int *red, int *green, int *blue) |
static int | read_len_table (uint8_t *dst, GetBitContext *gb) |
static int | generate_bits_table (uint32_t *dst, const uint8_t *len_table) |
static void | heap_sift (HeapElem *h, int root, int size) |
static void | generate_len_table (uint8_t *dst, const uint64_t *stats) |
static void | generate_joint_tables (HYuvContext *s) |
static int | read_huffman_tables (HYuvContext *s, const uint8_t *src, int length) |
static int | read_old_huffman_tables (HYuvContext *s) |
static av_cold void | alloc_temp (HYuvContext *s) |
static av_cold int | common_init (AVCodecContext *avctx) |
static av_cold int | decode_init (AVCodecContext *avctx) |
static av_cold int | decode_init_thread_copy (AVCodecContext *avctx) |
static int | store_table (HYuvContext *s, const uint8_t *len, uint8_t *buf) |
static av_cold int | encode_init (AVCodecContext *avctx) |
static void | decode_422_bitstream (HYuvContext *s, int count) |
static void | decode_gray_bitstream (HYuvContext *s, int count) |
static int | encode_422_bitstream (HYuvContext *s, int offset, int count) |
static int | encode_gray_bitstream (HYuvContext *s, int count) |
static av_always_inline void | decode_bgr_1 (HYuvContext *s, int count, int decorrelate, int alpha) |
static void | decode_bgr_bitstream (HYuvContext *s, int count) |
static int | encode_bgra_bitstream (HYuvContext *s, int count, int planes) |
static void | draw_slice (HYuvContext *s, int y) |
static int | decode_frame (AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) |
static int | common_end (HYuvContext *s) |
static av_cold int | decode_end (AVCodecContext *avctx) |
static int | encode_frame (AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data) |
static av_cold int | encode_end (AVCodecContext *avctx) |
Variables | |
static const unsigned char | classic_shift_luma [classic_shift_luma_table_size+FF_INPUT_BUFFER_PADDING_SIZE] |
static const unsigned char | classic_shift_chroma [classic_shift_chroma_table_size+FF_INPUT_BUFFER_PADDING_SIZE] |
static const unsigned char | classic_add_luma [256] |
static const unsigned char | classic_add_chroma [256] |
AVCodec | ff_huffyuv_decoder |
AVCodec | ff_ffvhuff_decoder |
AVCodec | ff_huffyuv_encoder |
AVCodec | ff_ffvhuff_encoder |
huffyuv codec for libavcodec.
Definition in file huffyuv.c.
#define B 0 |
Definition at line 45 of file huffyuv.c.
Referenced by encode_frame(), and sub_left_prediction_bgr32().
#define classic_shift_chroma_table_size 59 |
Definition at line 92 of file huffyuv.c.
Referenced by read_old_huffman_tables().
#define classic_shift_luma_table_size 42 |
Definition at line 85 of file huffyuv.c.
Referenced by read_old_huffman_tables().
#define G 1 |
Definition at line 46 of file huffyuv.c.
Referenced by encode_frame(), and sub_left_prediction_bgr32().
#define LOAD2 |
int y0 = s->temp[0][2*i];\ int y1 = s->temp[0][2*i+1];
#define LOAD3 |
#define R 2 |
Definition at line 47 of file huffyuv.c.
Referenced by encode_frame(), and sub_left_prediction_bgr32().
#define READ_2PIX | ( | dst0, | ||
dst1, | ||||
plane1 | ||||
) |
{\ uint16_t code = get_vlc2(&s->gb, s->vlc[3+plane1].table, VLC_BITS, 1);\ if(code != 0xffff){\ dst0 = code>>8;\ dst1 = code;\ }else{\ dst0 = get_vlc2(&s->gb, s->vlc[0].table, VLC_BITS, 3);\ dst1 = get_vlc2(&s->gb, s->vlc[plane1].table, VLC_BITS, 3);\ }\ }
Definition at line 738 of file huffyuv.c.
Referenced by decode_422_bitstream(), and decode_gray_bitstream().
#define STAT2 |
s->stats[0][y0]++;\ s->stats[0][y1]++;
#define STAT3 |
s->stats[0][b]++;\ s->stats[1][g]++;\ s->stats[2][r]++;\ if(planes==4) s->stats[2][a]++;
#define VLC_BITS 11 |
Definition at line 37 of file huffyuv.c.
Referenced by decode_bgr_1(), generate_joint_tables(), read_huffman_tables(), and read_old_huffman_tables().
#define WRITE2 |
#define WRITE3 |
typedef struct HYuvContext HYuvContext |
static av_cold void alloc_temp | ( | HYuvContext * | s | ) | [static] |
Definition at line 430 of file huffyuv.c.
Referenced by decode_init(), decode_init_thread_copy(), and encode_init().
static int common_end | ( | HYuvContext * | s | ) | [static] |
Definition at line 1236 of file huffyuv.c.
Referenced by decode_end(), and encode_end().
static av_cold int common_init | ( | AVCodecContext * | avctx | ) | [static] |
Definition at line 442 of file huffyuv.c.
Referenced by decode_init(), and encode_init().
static void decode_422_bitstream | ( | HYuvContext * | s, | |
int | count | |||
) | [static] |
Definition at line 749 of file huffyuv.c.
Referenced by decode_frame().
static av_always_inline void decode_bgr_1 | ( | HYuvContext * | s, | |
int | count, | |||
int | decorrelate, | |||
int | alpha | |||
) | [static] |
Definition at line 881 of file huffyuv.c.
Referenced by decode_bgr_bitstream().
static void decode_bgr_bitstream | ( | HYuvContext * | s, | |
int | count | |||
) | [static] |
Definition at line 901 of file huffyuv.c.
Referenced by decode_frame().
static av_cold int decode_end | ( | AVCodecContext * | avctx | ) | [static] |
static int decode_frame | ( | AVCodecContext * | avctx, | |
void * | data, | |||
int * | data_size, | |||
AVPacket * | avpkt | |||
) | [static] |
static void decode_gray_bitstream | ( | HYuvContext * | s, | |
int | count | |||
) | [static] |
Definition at line 767 of file huffyuv.c.
Referenced by decode_frame().
static av_cold int decode_init | ( | AVCodecContext * | avctx | ) | [static] |
static av_cold int decode_init_thread_copy | ( | AVCodecContext * | avctx | ) | [static] |
static void draw_slice | ( | HYuvContext * | s, | |
int | y | |||
) | [static] |
Definition at line 960 of file huffyuv.c.
Referenced by avfilter_draw_slice(), and decode_frame().
static int encode_422_bitstream | ( | HYuvContext * | s, | |
int | offset, | |||
int | count | |||
) | [static] |
Definition at line 784 of file huffyuv.c.
Referenced by encode_frame().
static int encode_bgra_bitstream | ( | HYuvContext * | s, | |
int | count, | |||
int | planes | |||
) | [inline, static] |
Definition at line 915 of file huffyuv.c.
Referenced by encode_frame().
static av_cold int encode_end | ( | AVCodecContext * | avctx | ) | [static] |
static int encode_frame | ( | AVCodecContext * | avctx, | |
unsigned char * | buf, | |||
int | buf_size, | |||
void * | data | |||
) | [static] |
static int encode_gray_bitstream | ( | HYuvContext * | s, | |
int | count | |||
) | [static] |
Definition at line 837 of file huffyuv.c.
Referenced by encode_frame().
static av_cold int encode_init | ( | AVCodecContext * | avctx | ) | [static] |
static int generate_bits_table | ( | uint32_t * | dst, | |
const uint8_t * | len_table | |||
) | [static] |
Definition at line 227 of file huffyuv.c.
Referenced by encode_frame(), encode_init(), and read_huffman_tables().
static void generate_joint_tables | ( | HYuvContext * | s | ) | [static] |
Definition at line 304 of file huffyuv.c.
Referenced by read_huffman_tables(), and read_old_huffman_tables().
static void generate_len_table | ( | uint8_t * | dst, | |
const uint64_t * | stats | |||
) | [static] |
Definition at line 265 of file huffyuv.c.
Referenced by encode_frame(), and encode_init().
static void heap_sift | ( | HeapElem * | h, | |
int | root, | |||
int | size | |||
) | [static] |
Definition at line 251 of file huffyuv.c.
Referenced by generate_len_table().
static int read_huffman_tables | ( | HYuvContext * | s, | |
const uint8_t * | src, | |||
int | length | |||
) | [static] |
Definition at line 373 of file huffyuv.c.
Referenced by decode_frame(), decode_init(), and decode_init_thread_copy().
static int read_len_table | ( | uint8_t * | dst, | |
GetBitContext * | gb | |||
) | [static] |
Definition at line 208 of file huffyuv.c.
Referenced by read_huffman_tables(), and read_old_huffman_tables().
static int read_old_huffman_tables | ( | HYuvContext * | s | ) | [static] |
Definition at line 394 of file huffyuv.c.
Referenced by decode_init(), and decode_init_thread_copy().
static int store_table | ( | HYuvContext * | s, | |
const uint8_t * | len, | |||
uint8_t * | buf | |||
) | [static] |
Definition at line 582 of file huffyuv.c.
Referenced by encode_frame(), and encode_init().
static int sub_left_prediction | ( | HYuvContext * | s, | |
uint8_t * | dst, | |||
uint8_t * | src, | |||
int | w, | |||
int | left | |||
) | [inline, static] |
Definition at line 137 of file huffyuv.c.
Referenced by encode_frame().
static void sub_left_prediction_bgr32 | ( | HYuvContext * | s, | |
uint8_t * | dst, | |||
uint8_t * | src, | |||
int | w, | |||
int * | red, | |||
int * | green, | |||
int * | blue, | |||
int * | alpha | |||
) | [inline, static] |
Definition at line 157 of file huffyuv.c.
Referenced by encode_frame().
static void sub_left_prediction_rgb24 | ( | HYuvContext * | s, | |
uint8_t * | dst, | |||
uint8_t * | src, | |||
int | w, | |||
int * | red, | |||
int * | green, | |||
int * | blue | |||
) | [inline, static] |
Definition at line 185 of file huffyuv.c.
Referenced by encode_frame().
const unsigned char classic_add_chroma[256] [static] |
{ 3, 1, 2, 2, 2, 2, 3, 3, 7, 5, 7, 5, 8, 6, 11, 9, 7, 13, 11, 10, 9, 8, 7, 5, 9, 7, 6, 4, 7, 5, 8, 7, 11, 8, 13, 11, 19, 15, 22, 23, 20, 33, 32, 28, 27, 29, 51, 77, 43, 45, 76, 81, 46, 82, 75, 55, 56,144, 58, 80, 60, 74,147, 63, 143, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 27, 30, 21, 22, 17, 14, 5, 6,100, 54, 47, 50, 51, 53,106,107,108,109,110,111, 112,113,114,115, 4,117,118, 92, 94,121,122, 3,124,103, 2, 1, 0,129,130,131,120,119,126,125,136,137,138,139,140,141,142,134, 135,132,133,104, 64,101, 62, 57,102, 95, 93, 59, 61, 28, 97, 96, 52, 49, 48, 29, 32, 25, 24, 46, 23, 98, 45, 44, 43, 20, 42, 41, 19, 18, 99, 40, 15, 39, 38, 16, 13, 12, 11, 37, 10, 9, 8, 36, 7,128,127,105,123,116, 35, 34, 33,145, 31, 79, 42,146, 78, 26, 83, 48, 49, 50, 44, 47, 26, 31, 30, 18, 17, 19, 21, 24, 25, 13, 14, 16, 17, 18, 20, 21, 12, 14, 15, 9, 10, 6, 9, 6, 5, 8, 6, 12, 8, 10, 7, 9, 6, 4, 6, 2, 2, 3, 3, 3, 3, 2, }
Definition at line 118 of file huffyuv.c.
Referenced by read_old_huffman_tables().
const unsigned char classic_add_luma[256] [static] |
{ 3, 9, 5, 12, 10, 35, 32, 29, 27, 50, 48, 45, 44, 41, 39, 37, 73, 70, 68, 65, 64, 61, 58, 56, 53, 50, 49, 46, 44, 41, 38, 36, 68, 65, 63, 61, 58, 55, 53, 51, 48, 46, 45, 43, 41, 39, 38, 36, 35, 33, 32, 30, 29, 27, 26, 25, 48, 47, 46, 44, 43, 41, 40, 39, 37, 36, 35, 34, 32, 31, 30, 28, 27, 26, 24, 23, 22, 20, 19, 37, 35, 34, 33, 31, 30, 29, 27, 26, 24, 23, 21, 20, 18, 17, 15, 29, 27, 26, 24, 22, 21, 19, 17, 16, 14, 26, 25, 23, 21, 19, 18, 16, 15, 27, 25, 23, 21, 19, 17, 16, 14, 26, 25, 23, 21, 18, 17, 14, 12, 17, 19, 13, 4, 9, 2, 11, 1, 7, 8, 0, 16, 3, 14, 6, 12, 10, 5, 15, 18, 11, 10, 13, 15, 16, 19, 20, 22, 24, 27, 15, 18, 20, 22, 24, 26, 14, 17, 20, 22, 24, 27, 15, 18, 20, 23, 25, 28, 16, 19, 22, 25, 28, 32, 36, 21, 25, 29, 33, 38, 42, 45, 49, 28, 31, 34, 37, 40, 42, 44, 47, 49, 50, 52, 54, 56, 57, 59, 60, 62, 64, 66, 67, 69, 35, 37, 39, 40, 42, 43, 45, 47, 48, 51, 52, 54, 55, 57, 59, 60, 62, 63, 66, 67, 69, 71, 72, 38, 40, 42, 43, 46, 47, 49, 51, 26, 28, 30, 31, 33, 34, 18, 19, 11, 13, 7, 8, }
Definition at line 99 of file huffyuv.c.
Referenced by read_old_huffman_tables().
const unsigned char classic_shift_chroma[classic_shift_chroma_table_size+FF_INPUT_BUFFER_PADDING_SIZE] [static] |
{ 66,36,37,38,39,40,41,75,76,77,110,239,144,81,82,83,84,85,118,183, 56,57,88,89,56,89,154,57,58,57,26,141,57,56,58,57,58,57,184,119, 214,245,116,83,82,49,80,79,78,77,44,75,41,40,39,38,37,36,34, 0 }
Definition at line 93 of file huffyuv.c.
Referenced by read_old_huffman_tables().
const unsigned char classic_shift_luma[classic_shift_luma_table_size+FF_INPUT_BUFFER_PADDING_SIZE] [static] |
{ 34,36,35,69,135,232,9,16,10,24,11,23,12,16,13,10,14,8,15,8, 16,8,17,20,16,10,207,206,205,236,11,8,10,21,9,23,8,8,199,70, 69,68, 0 }
Definition at line 86 of file huffyuv.c.
Referenced by read_old_huffman_tables().
{ .name = "ffvhuff", .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_FFVHUFF, .priv_data_size = sizeof(HYuvContext), .init = decode_init, .close = decode_end, .decode = decode_frame, .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS, .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy), .long_name = NULL_IF_CONFIG_SMALL("Huffyuv FFmpeg variant"), }
{ .name = "ffvhuff", .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_FFVHUFF, .priv_data_size = sizeof(HYuvContext), .init = encode_init, .encode = encode_frame, .close = encode_end, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("Huffyuv FFmpeg variant"), }
{ .name = "huffyuv", .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_HUFFYUV, .priv_data_size = sizeof(HYuvContext), .init = decode_init, .close = decode_end, .decode = decode_frame, .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS, .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy), .long_name = NULL_IF_CONFIG_SMALL("Huffyuv / HuffYUV"), }
{ .name = "huffyuv", .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_HUFFYUV, .priv_data_size = sizeof(HYuvContext), .init = encode_init, .encode = encode_frame, .close = encode_end, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV422P, PIX_FMT_RGB24, PIX_FMT_RGB32, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("Huffyuv / HuffYUV"), }