lagarith.c File Reference

Lagarith lossless decoder. More...

#include "avcodec.h"
#include "get_bits.h"
#include "mathops.h"
#include "dsputil.h"
#include "lagarithrac.h"

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.
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.
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 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 *data_size, AVPacket *avpkt)
 Decode a frame.
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 34 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 368 of file lagarith.c.

Referenced by lag_decode_frame().

static av_cold int lag_decode_end ( AVCodecContext avctx)
static

Definition at line 612 of file lagarith.c.

static int lag_decode_frame ( AVCodecContext avctx,
void data,
int *  data_size,
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 456 of file lagarith.c.

static av_cold int lag_decode_init ( AVCodecContext avctx)
static

Definition at line 602 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 272 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 314 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 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),
.capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("Lagarith lossless"),
}

Definition at line 623 of file lagarith.c.