#include "config_components.h"
#include "avcodec.h"
#include "bswapdsp.h"
#include "codec_internal.h"
#include "encode.h"
#include "huffyuv.h"
#include "huffman.h"
#include "huffyuvencdsp.h"
#include "lossless_videoencdsp.h"
#include "put_bits.h"
#include "libavutil/emms.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
Go to the source code of this file.
|
static void | diff_bytes (HYuvEncContext *s, uint8_t *dst, const uint8_t *src0, const uint8_t *src1, int w) |
|
static int | sub_left_prediction (HYuvEncContext *s, uint8_t *dst, const uint8_t *src, int w, int left) |
|
static void | sub_left_prediction_bgr32 (HYuvEncContext *s, uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue, int *alpha) |
|
static void | sub_left_prediction_rgb24 (HYuvEncContext *s, uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue) |
|
static void | sub_median_prediction (HYuvEncContext *s, uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int w, int *left, int *left_top) |
|
static int | store_table (HYuvEncContext *s, const uint8_t *len, uint8_t *buf) |
|
static int | store_huffman_tables (HYuvEncContext *s, uint8_t *buf) |
|
static av_cold int | encode_init (AVCodecContext *avctx) |
|
static int | encode_422_bitstream (HYuvEncContext *s, int offset, int count) |
|
static int | encode_plane_bitstream (HYuvEncContext *s, int width, int plane) |
|
static int | encode_gray_bitstream (HYuvEncContext *s, int count) |
|
static int | encode_bgra_bitstream (HYuvEncContext *s, int count, int planes) |
|
static int | encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet) |
|
static av_cold int | encode_end (AVCodecContext *avctx) |
|
huffyuv encoder
Definition in file huffyuvenc.c.
◆ STATS_OUT_SIZE
#define STATS_OUT_SIZE 21*MAX_N*3 + 4 |
◆ LOAD4
◆ LOADEND
◆ LOADEND_14
◆ LOADEND_16
#define LOADEND_16 int y0 = s->temp16[0][width-1]; |
◆ STATEND
#define STATEND s->stats[plane][y0]++; |
◆ STATEND_16
#define STATEND_16 s->stats[plane][y0>>2]++; |
◆ WRITEEND
◆ WRITEEND_16
Value: put_bits(&
s->pb,
s->len[plane][y0>>2],
s->bits[plane][y0>>2]);\
put_bits(&
s->pb, 2, y0&3);
◆ LOAD2 [1/2]
Value: int y0 =
s->temp[0][2 *
i];\
int y1 =
s->temp[0][2 *
i + 1];
◆ LOAD2_14
Value: int y0 =
s->temp16[0][2 *
i] &
mask;\
int y1 =
s->temp16[0][2 *
i + 1] &
mask;
◆ LOAD2_16
Value: int y0 =
s->temp16[0][2 *
i];\
int y1 =
s->temp16[0][2 *
i + 1];
◆ STAT2 [1/2]
◆ STAT2_16
Value: s->stats[plane][y0>>2]++;\
s->stats[plane][y1>>2]++;
◆ WRITE2 [1/2]
Value: put_bits(&
s->pb,
s->len[plane][y0],
s->bits[plane][y0]);\
put_bits(&
s->pb,
s->len[plane][y1],
s->bits[plane][y1]);
◆ WRITE2_16
Value: put_bits(&
s->pb,
s->len[plane][y0>>2],
s->bits[plane][y0>>2]);\
put_bits(&
s->pb, 2, y0&3);\
put_bits(&
s->pb,
s->len[plane][y1>>2],
s->bits[plane][y1>>2]);\
put_bits(&
s->pb, 2, y1&3);
◆ LOAD2 [2/2]
Value: int y0 =
s->temp[0][2 *
i];\
int y1 =
s->temp[0][2 *
i + 1];
◆ STAT2 [2/2]
◆ WRITE2 [2/2]
Value:
put_bits(&
s->pb,
s->len[0][y1],
s->bits[0][y1]);
◆ LOAD_GBRA
Value: int g =
s->temp[0][
planes == 3 ? 3 *
i + 1 : 4 *
i +
G]; \
int
b =(
s->temp[0][
planes == 3 ? 3 *
i + 2 : 4 *
i +
B] -
g) & 0xFF;\
int
r =(
s->temp[0][
planes == 3 ? 3 *
i + 0 : 4 *
i +
R] -
g) & 0xFF;\
◆ STAT_BGRA
◆ WRITE_GBRA
Value:
put_bits(&
s->pb,
s->len[0][
b],
s->bits[0][
b]); \
put_bits(&
s->pb,
s->len[2][
r],
s->bits[2][
r]); \
put_bits(&
s->pb,
s->len[2][
a],
s->bits[2][
a]);
◆ OFFSET
◆ VE
◆ COMMON_OPTIONS
Value: { "non_deterministic", "Allow multithreading for e.g. context=1 at the expense of determinism", \
Definition at line 1047 of file huffyuvenc.c.
◆ diff_bytes()
static void diff_bytes |
( |
HYuvEncContext * |
s, |
|
|
uint8_t * |
dst, |
|
|
const uint8_t * |
src0, |
|
|
const uint8_t * |
src1, |
|
|
int |
w |
|
) |
| |
|
inlinestatic |
◆ sub_left_prediction()
◆ sub_left_prediction_bgr32()
static void sub_left_prediction_bgr32 |
( |
HYuvEncContext * |
s, |
|
|
uint8_t * |
dst, |
|
|
const uint8_t * |
src, |
|
|
int |
w, |
|
|
int * |
red, |
|
|
int * |
green, |
|
|
int * |
blue, |
|
|
int * |
alpha |
|
) |
| |
|
inlinestatic |
◆ sub_left_prediction_rgb24()
static void sub_left_prediction_rgb24 |
( |
HYuvEncContext * |
s, |
|
|
uint8_t * |
dst, |
|
|
const uint8_t * |
src, |
|
|
int |
w, |
|
|
int * |
red, |
|
|
int * |
green, |
|
|
int * |
blue |
|
) |
| |
|
inlinestatic |
◆ sub_median_prediction()
static void sub_median_prediction |
( |
HYuvEncContext * |
s, |
|
|
uint8_t * |
dst, |
|
|
const uint8_t * |
src1, |
|
|
const uint8_t * |
src2, |
|
|
int |
w, |
|
|
int * |
left, |
|
|
int * |
left_top |
|
) |
| |
|
static |
◆ store_table()
◆ store_huffman_tables()
◆ encode_init()
◆ encode_422_bitstream()
◆ encode_plane_bitstream()
◆ encode_gray_bitstream()
◆ encode_bgra_bitstream()
◆ encode_frame()
◆ encode_end()
◆ normal_options
◆ ff_options
◆ normal_class
Initial value:= {
.class_name = "huffyuv",
}
Definition at line 1067 of file huffyuvenc.c.
◆ ff_class
Initial value:= {
.class_name = "ffvhuff",
}
Definition at line 1074 of file huffyuvenc.c.
◆ ff_huffyuv_encoder
Initial value:= {
.p.name = "huffyuv",
},
}
Definition at line 1081 of file huffyuvenc.c.
AVPixelFormat
Pixel format.
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define u(width, name, range_min, range_max)
static av_cold int encode_init(AVCodecContext *avctx)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define FF_CODEC_ENCODE_CB(func)
static const uint16_t mask[17]
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
static const AVClass normal_class
#define CODEC_LONG_NAME(str)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are in without and describe what they for example set the foo of the bar offset is the offset of the field in your context
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
#define LIBAVUTIL_VERSION_INT
const char * av_default_item_name(void *ptr)
Return the context name.
static av_cold int encode_end(AVCodecContext *avctx)
int(* init)(AVBSFContext *ctx)
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
static void predictor(uint8_t *src, ptrdiff_t size)
#define i(width, name, range_min, range_max)
static const AVOption normal_options[]
static const AVOption ff_options[]
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
static const struct @386 planes[]