FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
magicyuvenc.c File Reference
#include <stdlib.h>
#include <string.h>
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/qsort.h"
#include "avcodec.h"
#include "bytestream.h"
#include "put_bits.h"
#include "internal.h"
#include "thread.h"
#include "lossless_videoencdsp.h"

Go to the source code of this file.

Data Structures

struct  HuffEntry
 
struct  PTable
 Used to assign a occurrence count or "probability" to an input value. More...
 
struct  MagicYUVContext
 
struct  PackageMergerList
 Used to store intermediate lists in the package merge algorithm. More...
 

Macros

#define OFFSET(x)   offsetof(MagicYUVContext, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Enumerations

enum  Prediction {
  LEFT = 1, GRADIENT, MEDIAN, LEFT = 1,
  GRADIENT, MEDIAN
}
 

Functions

static void left_predict (MagicYUVContext *s, uint8_t *src, uint8_t *dst, ptrdiff_t stride, int width, int height)
 
static void gradient_predict (MagicYUVContext *s, uint8_t *src, uint8_t *dst, ptrdiff_t stride, int width, int height)
 
static void median_predict (MagicYUVContext *s, uint8_t *src, uint8_t *dst, ptrdiff_t stride, int width, int height)
 
static av_cold int magy_encode_init (AVCodecContext *avctx)
 
static int magy_huff_cmp_len (const void *a, const void *b)
 
static int huff_cmp_sym (const void *a, const void *b)
 
static void calculate_codes (HuffEntry *he)
 
static void count_usage (uint8_t *src, int width, int height, PTable *counts)
 
static int compare_by_prob (const void *a, const void *b)
 
static void magy_huffman_compute_bits (PTable *prob_table, HuffEntry *distincts, int size, int max_length)
 
static int encode_table (AVCodecContext *avctx, uint8_t *dst, int width, int height, PutBitContext *pb, HuffEntry *he)
 
static int encode_slice (uint8_t *src, uint8_t *dst, int dst_size, int width, int height, HuffEntry *he, int prediction)
 
static int magy_encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
 
static av_cold int magy_encode_close (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVClass magicyuv_class
 
AVCodec ff_magicyuv_encoder
 

Macro Definition Documentation

#define OFFSET (   x)    offsetof(MagicYUVContext, x)

Definition at line 557 of file magicyuvenc.c.

Definition at line 558 of file magicyuvenc.c.

Enumeration Type Documentation

enum Prediction
Enumerator
LEFT 
GRADIENT 
MEDIAN 
LEFT 
GRADIENT 
MEDIAN 

Definition at line 36 of file magicyuvenc.c.

Function Documentation

static void left_predict ( MagicYUVContext s,
uint8_t src,
uint8_t dst,
ptrdiff_t  stride,
int  width,
int  height 
)
static

Definition at line 74 of file magicyuvenc.c.

Referenced by magy_encode_init().

static void gradient_predict ( MagicYUVContext s,
uint8_t src,
uint8_t dst,
ptrdiff_t  stride,
int  width,
int  height 
)
static

Definition at line 98 of file magicyuvenc.c.

Referenced by magy_encode_init().

static void median_predict ( MagicYUVContext s,
uint8_t src,
uint8_t dst,
ptrdiff_t  stride,
int  width,
int  height 
)
static

Definition at line 126 of file magicyuvenc.c.

Referenced by magy_encode_init().

static av_cold int magy_encode_init ( AVCodecContext avctx)
static

Definition at line 147 of file magicyuvenc.c.

static int magy_huff_cmp_len ( const void a,
const void b 
)
static

Definition at line 248 of file magicyuvenc.c.

Referenced by calculate_codes().

static int huff_cmp_sym ( const void a,
const void b 
)
static

Definition at line 254 of file magicyuvenc.c.

Referenced by calculate_codes().

static void calculate_codes ( HuffEntry he)
static

Definition at line 260 of file magicyuvenc.c.

Referenced by encode_table().

static void count_usage ( uint8_t src,
int  width,
int  height,
PTable counts 
)
static

Definition at line 276 of file magicyuvenc.c.

Referenced by encode_table().

static int compare_by_prob ( const void a,
const void b 
)
static

Definition at line 296 of file magicyuvenc.c.

Referenced by magy_huffman_compute_bits().

static void magy_huffman_compute_bits ( PTable prob_table,
HuffEntry distincts,
int  size,
int  max_length 
)
static

Definition at line 303 of file magicyuvenc.c.

Referenced by encode_table().

static int encode_table ( AVCodecContext avctx,
uint8_t dst,
int  width,
int  height,
PutBitContext pb,
HuffEntry he 
)
static

Definition at line 364 of file magicyuvenc.c.

Referenced by magy_encode_frame().

static int encode_slice ( uint8_t src,
uint8_t dst,
int  dst_size,
int  width,
int  height,
HuffEntry he,
int  prediction 
)
static

Definition at line 390 of file magicyuvenc.c.

Referenced by magy_encode_frame().

static int magy_encode_frame ( AVCodecContext avctx,
AVPacket pkt,
const AVFrame frame,
int got_packet 
)
static

Definition at line 423 of file magicyuvenc.c.

static av_cold int magy_encode_close ( AVCodecContext avctx)
static

Definition at line 546 of file magicyuvenc.c.

Variable Documentation

const AVOption options[]
static
Initial value:
= {
{ "pred", "Prediction method", OFFSET(frame_pred), AV_OPT_TYPE_INT, {.i64=LEFT}, LEFT, MEDIAN, VE, "pred" },
{ "left", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = LEFT }, 0, 0, VE, "pred" },
{ "gradient", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = GRADIENT }, 0, 0, VE, "pred" },
{ "median", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MEDIAN }, 0, 0, VE, "pred" },
{ NULL},
}
#define NULL
Definition: coverity.c:32
#define OFFSET(x)
Definition: magicyuvenc.c:557
#define VE
Definition: magicyuvenc.c:558

Definition at line 559 of file magicyuvenc.c.

const AVClass magicyuv_class
static
Initial value:
= {
.class_name = "magicyuv",
.item_name = av_default_item_name,
.option = options,
}
static const AVOption options[]
Definition: magicyuvenc.c:559
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191

Definition at line 567 of file magicyuvenc.c.

AVCodec ff_magicyuv_encoder
Initial value:
= {
.name = "magicyuv",
.long_name = NULL_IF_CONFIG_SMALL("MagicYUV video"),
.priv_data_size = sizeof(MagicYUVContext),
.priv_class = &magicyuv_class,
.encode2 = magy_encode_frame,
.pix_fmts = (const enum AVPixelFormat[]) {
},
}
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:71
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
planar GBR 4:4:4 24bpp
Definition: pixfmt.h:168
#define AV_CODEC_CAP_INTRA_ONLY
Codec is intra only.
Definition: avcodec.h:1054
static av_cold int magy_encode_init(AVCodecContext *avctx)
Definition: magicyuvenc.c:147
static av_cold int magy_encode_close(AVCodecContext *avctx)
Definition: magicyuvenc.c:546
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1024
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:70
static int magy_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: magicyuvenc.c:423
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Definition: pixfmt.h:177
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
Y , 8bpp.
Definition: pixfmt.h:74
planar GBRA 4:4:4:4 32bpp
Definition: pixfmt.h:215
static const AVClass magicyuv_class
Definition: magicyuvenc.c:567
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64

Definition at line 574 of file magicyuvenc.c.