FFmpeg
Data Structures | Enumerations | Functions | Variables
lagarith.c File Reference
#include <inttypes.h>
#include "avcodec.h"
#include "get_bits.h"
#include "internal.h"
#include "mathops.h"
#include "lagarithrac.h"
#include "lossless_videodsp.h"
#include "thread.h"

Go to the source code of this file.

Data Structures

struct  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 52-bit 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)
 

Variables

const AVCodec ff_lagarith_decoder
 

Detailed Description

Lagarith lossless decoder

Author
Nathan Caldwell

Definition in file lagarith.c.

Enumeration Type Documentation

◆ LagarithFrameType

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 38 of file lagarith.c.

Function Documentation

◆ softfloat_reciprocal()

static uint64_t softfloat_reciprocal ( uint32_t  denom)
static

Compute the 52-bit 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
52-bit mantissa
See also
softfloat_mul

Definition at line 67 of file lagarith.c.

Referenced by lag_read_prob_header().

◆ softfloat_mul()

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
x32-bit integer factor
mantissamantissa of f with exponent 0
Returns
32-bit integer value (x*f)
See also
softfloat_reciprocal

Definition at line 86 of file lagarith.c.

Referenced by lag_read_prob_header().

◆ lag_calc_zero_run()

static uint8_t lag_calc_zero_run ( int8_t  x)
static

Definition at line 97 of file lagarith.c.

Referenced by lag_decode_line(), and lag_decode_zero_run_line().

◆ lag_decode_prob()

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

Definition at line 102 of file lagarith.c.

Referenced by lag_read_prob_header().

◆ lag_read_prob_header()

static int lag_read_prob_header ( lag_rac rac,
GetBitContext gb 
)
static

Definition at line 136 of file lagarith.c.

Referenced by lag_decode_arith_plane().

◆ add_lag_median_prediction()

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 242 of file lagarith.c.

Referenced by lag_pred_line().

◆ lag_pred_line()

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

Definition at line 266 of file lagarith.c.

Referenced by lag_decode_arith_plane().

◆ lag_pred_line_yuy2()

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

Definition at line 292 of file lagarith.c.

Referenced by lag_decode_arith_plane().

◆ lag_decode_line()

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

Definition at line 329 of file lagarith.c.

Referenced by lag_decode_arith_plane().

◆ lag_decode_zero_run_line()

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 371 of file lagarith.c.

Referenced by lag_decode_arith_plane().

◆ lag_decode_arith_plane()

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 429 of file lagarith.c.

Referenced by lag_decode_frame().

◆ lag_decode_frame()

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 537 of file lagarith.c.

◆ lag_decode_init()

static av_cold int lag_decode_init ( AVCodecContext avctx)
static

Definition at line 720 of file lagarith.c.

Variable Documentation

◆ ff_lagarith_decoder

const AVCodec ff_lagarith_decoder
Initial value:
= {
.name = "lagarith",
.long_name = NULL_IF_CONFIG_SMALL("Lagarith lossless"),
.priv_data_size = sizeof(LagarithContext),
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}

Definition at line 730 of file lagarith.c.

FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:42
AV_CODEC_ID_LAGARITH
@ AV_CODEC_ID_LAGARITH
Definition: codec_id.h:197
lag_decode_frame
static int lag_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Decode a frame.
Definition: lagarith.c:537
lag_decode_init
static av_cold int lag_decode_init(AVCodecContext *avctx)
Definition: lagarith.c:720
init
static int init
Definition: av_tx.c:47
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:71
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:113
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
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:117
LagarithContext
Definition: lagarith.c:52
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201