FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
magicyuv.c File Reference
#include <stdlib.h>
#include <string.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 37 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); \
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 122 of file magicyuv.c.

Enumeration Type Documentation

◆ Prediction

enum Prediction
Enumerator
LEFT 
GRADIENT 
MEDIAN 
LEFT 
GRADIENT 
MEDIAN 

Definition at line 44 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 80 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 101 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 137 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 260 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 382 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 435 of file magicyuv.c.

◆ magy_decode_init()

static av_cold int magy_decode_init ( AVCodecContext avctx)
static

Definition at line 691 of file magicyuv.c.

◆ magy_decode_end()

static av_cold int magy_decode_end ( AVCodecContext avctx)
static

Definition at line 698 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 713 of file magicyuv.c.

get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:694
b
#define b
Definition: input.c:41
MagicYUVContext
Definition: magicyuv.c:55
width
#define width
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:287
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:272
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:691
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:270
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:365
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
CACHED_BITSTREAM_READER
#define CACHED_BITSTREAM_READER
Definition: magicyuv.c:25
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)
Definition: get_bits.h:667
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:698
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:435
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