FFmpeg
Data Structures | Enumerations | Functions | Variables
lagarith.c File Reference
#include <inttypes.h>
#include "avcodec.h"
#include "get_bits.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

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 37 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 66 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 85 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 96 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 101 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 135 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 241 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 265 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 291 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 328 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 370 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 428 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 536 of file lagarith.c.

◆ lag_decode_init()

static av_cold int lag_decode_init ( AVCodecContext avctx)
static

Definition at line 705 of file lagarith.c.

Variable Documentation

◆ ff_lagarith_decoder

AVCodec ff_lagarith_decoder
Initial value:
= {
.name = "lagarith",
.long_name = NULL_IF_CONFIG_SMALL("Lagarith lossless"),
.priv_data_size = sizeof(LagarithContext),
.init_thread_copy = ONLY_IF_THREADS_ENABLED(lag_decode_init_thread_copy),
.decode = lag_decode_frame,
}

Definition at line 725 of file lagarith.c.

AV_CODEC_ID_LAGARITH
@ AV_CODEC_ID_LAGARITH
Definition: avcodec.h:365
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
lag_decode_frame
static int lag_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Decode a frame.
Definition: lagarith.c:536
lag_decode_init
static av_cold int lag_decode_init(AVCodecContext *avctx)
Definition: lagarith.c:705
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1037
ONLY_IF_THREADS_ENABLED
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:227
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:981
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:188
init_thread_copy
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call have add an init_thread_copy() which re-allocates them for other threads. Add AV_CODEC_CAP_FRAME_THREADS to the codec capabilities. There will be very little speed gain at this point but it should work. If there are inter-frame dependencies
LagarithContext
Definition: lagarith.c:51
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201