FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
magicyuv.c File Reference
#include <stdlib.h>
#include <string.h>
#include "libavutil/mem.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"
#include "lossless_videodsp.h"
#include "thread.h"

Go to the source code of this file.

Data Structures

struct  Slice
 
struct  HuffEntry
 
struct  MagicYUVContext
 

Macros

#define CACHED_BITSTREAM_READER   !ARCH_X86_32
 
#define VLC_BITS   12
 
#define READ_PLANE(dst, plane, b, c)
 

Enumerations

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

Functions

static int huff_build (AVCodecContext *avctx, const uint8_t len[], uint16_t codes_pos[33], VLC *vlc, VLC_MULTI *multi, int nb_elems, void *logctx)
 
static void magicyuv_median_pred16 (uint16_t *dst, const uint16_t *src1, const uint16_t *diff, intptr_t w, int *left, int *left_top, int max)
 
static int magy_decode_slice10 (AVCodecContext *avctx, void *tdata, int j, int threadnr)
 
static int magy_decode_slice (AVCodecContext *avctx, void *tdata, int j, int threadnr)
 
static int build_huffman (AVCodecContext *avctx, const uint8_t *table, int table_size, int max)
 
static int magy_decode_frame (AVCodecContext *avctx, AVFrame *p, int *got_frame, AVPacket *avpkt)
 
static av_cold int magy_decode_init (AVCodecContext *avctx)
 
static av_cold int magy_decode_end (AVCodecContext *avctx)
 

Variables

const FFCodec ff_magicyuv_decoder
 

Macro Definition Documentation

◆ CACHED_BITSTREAM_READER

#define CACHED_BITSTREAM_READER   !ARCH_X86_32

Definition at line 25 of file magicyuv.c.

◆ VLC_BITS

#define VLC_BITS   12

Definition at line 38 of file magicyuv.c.

◆ READ_PLANE

#define READ_PLANE (   dst,
  plane,
  b,
  c 
)
Value:
{ \
x = 0; \
for (; CACHED_BITSTREAM_READER && x < width-c && get_bits_left(&gb) > 0;) {\
ret = get_vlc_multi(&gb, (uint8_t *)dst + x * b, multi, \
vlc, vlc_bits, 3, b); \
if (ret <= 0) \
x += ret; \
} \
for (; x < width && get_bits_left(&gb) > 0; x++) \
dst[x] = get_vlc2(&gb, vlc, vlc_bits, 3); \
dst += stride; \
}

Definition at line 123 of file magicyuv.c.

Enumeration Type Documentation

◆ Prediction

enum Prediction
Enumerator
LEFT 
GRADIENT 
MEDIAN 
LEFT 
GRADIENT 
MEDIAN 

Definition at line 45 of file magicyuv.c.

Function Documentation

◆ huff_build()

static int huff_build ( AVCodecContext avctx,
const uint8_t  len[],
uint16_t  codes_pos[33],
VLC vlc,
VLC_MULTI multi,
int  nb_elems,
void *  logctx 
)
static

Definition at line 81 of file magicyuv.c.

Referenced by build_huffman().

◆ magicyuv_median_pred16()

static void magicyuv_median_pred16 ( uint16_t *  dst,
const uint16_t *  src1,
const uint16_t *  diff,
intptr_t  w,
int *  left,
int *  left_top,
int  max 
)
static

Definition at line 102 of file magicyuv.c.

Referenced by magy_decode_slice10().

◆ magy_decode_slice10()

static int magy_decode_slice10 ( AVCodecContext avctx,
void *  tdata,
int  j,
int  threadnr 
)
static

Definition at line 138 of file magicyuv.c.

Referenced by magy_decode_frame().

◆ magy_decode_slice()

static int magy_decode_slice ( AVCodecContext avctx,
void *  tdata,
int  j,
int  threadnr 
)
static

Definition at line 261 of file magicyuv.c.

Referenced by magy_decode_frame().

◆ build_huffman()

static int build_huffman ( AVCodecContext avctx,
const uint8_t *  table,
int  table_size,
int  max 
)
static

Definition at line 383 of file magicyuv.c.

Referenced by magy_decode_frame().

◆ magy_decode_frame()

static int magy_decode_frame ( AVCodecContext avctx,
AVFrame p,
int *  got_frame,
AVPacket avpkt 
)
static

Definition at line 436 of file magicyuv.c.

◆ magy_decode_init()

static av_cold int magy_decode_init ( AVCodecContext avctx)
static

Definition at line 689 of file magicyuv.c.

◆ magy_decode_end()

static av_cold int magy_decode_end ( AVCodecContext avctx)
static

Definition at line 696 of file magicyuv.c.

Variable Documentation

◆ ff_magicyuv_decoder

const FFCodec ff_magicyuv_decoder
Initial value:
= {
.p.name = "magicyuv",
CODEC_LONG_NAME("MagicYUV video"),
.p.type = AVMEDIA_TYPE_VIDEO,
.priv_data_size = sizeof(MagicYUVContext),
.close = magy_decode_end,
.p.capabilities = AV_CODEC_CAP_DR1 |
}

Definition at line 711 of file magicyuv.c.

get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:695
b
#define b
Definition: input.c:41
MagicYUVContext
Definition: magicyuv.c:56
get_vlc_multi
static int get_vlc_multi(GetBitContext *s, uint8_t *dst, const VLC_MULTI_ELEM *const Jtable, const VLCElem *const table, const int bits, const int max_depth, const int symbols_size)
Definition: get_bits.h:667
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:311
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:296
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:110
magy_decode_init
static av_cold int magy_decode_init(AVCodecContext *avctx)
Definition: magicyuv.c:689
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:652
AV_CODEC_ID_MAGICYUV
@ AV_CODEC_ID_MAGICYUV
Definition: codec_id.h:274
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:83
CACHED_BITSTREAM_READER
#define CACHED_BITSTREAM_READER
Definition: magicyuv.c:25
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:114
magy_decode_end
static av_cold int magy_decode_end(AVCodecContext *avctx)
Definition: magicyuv.c:696
stride
#define stride
Definition: h264pred_template.c:537
ret
ret
Definition: filter_design.txt:187
magy_decode_frame
static int magy_decode_frame(AVCodecContext *avctx, AVFrame *p, int *got_frame, AVPacket *avpkt)
Definition: magicyuv.c:436
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
width
#define width
Definition: dsp.h:85