lagarith.c File Reference

Lagarith lossless decoder. More...

#include "avcodec.h"
#include "get_bits.h"
#include "mathops.h"
#include "dsputil.h"
#include "lagarithrac.h"
#include "thread.h"
Include dependency graph for lagarith.c:

Go to the source code of this file.

Data Structures

struct  LagarithContext
 

Typedefs

typedef struct LagarithContext LagarithContext
 

Enumerations

enum  LagarithFrameType {
  FRAME_RAW = 1, FRAME_U_RGB24 = 2, FRAME_ARITH_YUY2 = 3, FRAME_ARITH_RGB24 = 4,
  FRAME_SOLID_GRAY = 5, FRAME_SOLID_COLOR = 6, FRAME_OLD_ARITH_RGB = 7, FRAME_ARITH_RGBA = 8,
  FRAME_SOLID_RGBA = 9, FRAME_ARITH_YV12 = 10, FRAME_REDUCED_RES = 11
}
 

Functions

static uint64_t softfloat_reciprocal (uint32_t denom)
 Compute the 52bit mantissa of 1/(double)denom. More...
 
static uint32_t softfloat_mul (uint32_t x, uint64_t mantissa)
 (uint32_t)(x*f), where f has the given mantissa, and exponent 0 Used in combination with softfloat_reciprocal computes x/(double)denom. More...
 
static uint8_t lag_calc_zero_run (int8_t x)
 
static int lag_decode_prob (GetBitContext *gb, uint32_t *value)
 
static int lag_read_prob_header (lag_rac *rac, GetBitContext *gb)
 
static void add_lag_median_prediction (uint8_t *dst, uint8_t *src1, uint8_t *diff, int w, int *left, int *left_top)
 
static void lag_pred_line (LagarithContext *l, uint8_t *buf, int width, int stride, int line)
 
static void lag_pred_line_yuy2 (LagarithContext *l, uint8_t *buf, int width, int stride, int line, int is_luma)
 
static int lag_decode_line (LagarithContext *l, lag_rac *rac, uint8_t *dst, int width, int stride, int esc_count)
 
static int lag_decode_zero_run_line (LagarithContext *l, uint8_t *dst, const uint8_t *src, const uint8_t *src_end, int width, int esc_count)
 
static int lag_decode_arith_plane (LagarithContext *l, uint8_t *dst, int width, int height, int stride, const uint8_t *src, int src_size)
 
static int lag_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 Decode a frame. More...
 
static av_cold int lag_decode_init (AVCodecContext *avctx)
 
static av_cold int lag_decode_end (AVCodecContext *avctx)
 

Variables

AVCodec ff_lagarith_decoder
 

Detailed Description

Lagarith lossless decoder.

Author
Nathan Caldwell

Definition in file lagarith.c.

Typedef Documentation

Enumeration Type Documentation

Enumerator
FRAME_RAW 

uncompressed

FRAME_U_RGB24 

unaligned RGB24

FRAME_ARITH_YUY2 

arithmetic coded YUY2

FRAME_ARITH_RGB24 

arithmetic coded RGB24

FRAME_SOLID_GRAY 

solid grayscale color frame

FRAME_SOLID_COLOR 

solid non-grayscale color frame

FRAME_OLD_ARITH_RGB 

obsolete arithmetic coded RGB (no longer encoded by upstream since version 1.1.0)

FRAME_ARITH_RGBA 

arithmetic coded RGBA

FRAME_SOLID_RGBA 

solid RGBA color frame

FRAME_ARITH_YV12 

arithmetic coded YV12

FRAME_REDUCED_RES 

reduced resolution YV12 frame

Definition at line 35 of file lagarith.c.

Function Documentation

static void add_lag_median_prediction ( uint8_t dst,
uint8_t src1,
uint8_t diff,
int  w,
int *  left,
int *  left_top 
)
static

Definition at line 221 of file lagarith.c.

Referenced by lag_pred_line().

static uint8_t lag_calc_zero_run ( int8_t  x)
static

Definition at line 96 of file lagarith.c.

Referenced by lag_decode_line(), and lag_decode_zero_run_line().

static int lag_decode_arith_plane ( LagarithContext l,
uint8_t dst,
int  width,
int  height,
int  stride,
const uint8_t src,
int  src_size 
)
static

Definition at line 406 of file lagarith.c.

Referenced by lag_decode_frame().

static av_cold int lag_decode_end ( AVCodecContext avctx)
static

Definition at line 695 of file lagarith.c.

static int lag_decode_frame ( AVCodecContext avctx,
void data,
int *  got_frame,
AVPacket avpkt 
)
static

Decode a frame.

Parameters
avctxcodec context
dataoutput AVFrame
data_sizesize of output data or 0 if no picture is returned
avpktinput packet
Returns
number of consumed bytes on success or negative if decode fails

Definition at line 508 of file lagarith.c.

static av_cold int lag_decode_init ( AVCodecContext avctx)
static

Definition at line 685 of file lagarith.c.

static int lag_decode_line ( LagarithContext l,
lag_rac rac,
uint8_t dst,
int  width,
int  stride,
int  esc_count 
)
static

Definition at line 310 of file lagarith.c.

Referenced by lag_decode_arith_plane().

static int lag_decode_prob ( GetBitContext gb,
uint32_t *  value 
)
static

Definition at line 101 of file lagarith.c.

Referenced by lag_read_prob_header().

static int lag_decode_zero_run_line ( LagarithContext l,
uint8_t dst,
const uint8_t src,
const uint8_t src_end,
int  width,
int  esc_count 
)
static

Definition at line 352 of file lagarith.c.

Referenced by lag_decode_arith_plane().

static void lag_pred_line ( LagarithContext l,
uint8_t buf,
int  width,
int  stride,
int  line 
)
static

Definition at line 245 of file lagarith.c.

Referenced by lag_decode_arith_plane().

static void lag_pred_line_yuy2 ( LagarithContext l,
uint8_t buf,
int  width,
int  stride,
int  line,
int  is_luma 
)
static

Definition at line 272 of file lagarith.c.

Referenced by lag_decode_arith_plane().

static int lag_read_prob_header ( lag_rac rac,
GetBitContext gb 
)
static

Definition at line 135 of file lagarith.c.

Referenced by lag_decode_arith_plane().

static uint32_t softfloat_mul ( uint32_t  x,
uint64_t  mantissa 
)
static

(uint32_t)(x*f), where f has the given mantissa, and exponent 0 Used in combination with softfloat_reciprocal computes x/(double)denom.

Parameters
x32bit integer factor
mantissamantissa of f with exponent 0
Returns
32bit integer value (x*f)
See also
softfloat_reciprocal

Definition at line 85 of file lagarith.c.

Referenced by lag_read_prob_header().

static uint64_t softfloat_reciprocal ( uint32_t  denom)
static

Compute the 52bit mantissa of 1/(double)denom.

This crazy format uses floats in an entropy coder and we have to match x86 rounding exactly, thus ordinary floats aren't portable enough.

Parameters
denomdenominator
Returns
52bit mantissa
See also
softfloat_mul

Definition at line 66 of file lagarith.c.

Referenced by lag_read_prob_header().

Variable Documentation

AVCodec ff_lagarith_decoder
Initial value:
= {
.name = "lagarith",
.priv_data_size = sizeof(LagarithContext),
.long_name = NULL_IF_CONFIG_SMALL("Lagarith lossless"),
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
struct LagarithContext LagarithContext
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_cold int lag_decode_init(AVCodecContext *avctx)
Definition: lagarith.c:685
static int lag_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Decode a frame.
Definition: lagarith.c:508
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static av_cold int lag_decode_end(AVCodecContext *avctx)
Definition: lagarith.c:695
#define CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868

Definition at line 704 of file lagarith.c.