FFmpeg  4.0
Data Structures | Macros | Enumerations | Functions | Variables
diracdec.c File Reference

Dirac Decoder. More...

#include "libavutil/pixdesc.h"
#include "libavutil/thread.h"
#include "avcodec.h"
#include "get_bits.h"
#include "bytestream.h"
#include "internal.h"
#include "golomb.h"
#include "dirac_arith.h"
#include "dirac_vlc.h"
#include "mpeg12data.h"
#include "libavcodec/mpegvideo.h"
#include "mpegvideoencdsp.h"
#include "dirac_dwt.h"
#include "dirac.h"
#include "diractab.h"
#include "diracdsp.h"
#include "videodsp.h"

Go to the source code of this file.

Data Structures

struct  DiracFrame
 
struct  DiracBlock
 
struct  SubBand
 
struct  Plane
 
struct  DiracSlice
 
struct  DiracContext
 
struct  SliceCoeffs
 

Macros

#define MAX_REFERENCE_FRAMES   8
 The spec limits this to 3 for frame coding, but in practice can be as high as 6. More...
 
#define MAX_DELAY   5 /* limit for main profile for frame coding (TODO: field coding) */
 
#define MAX_FRAMES   (MAX_REFERENCE_FRAMES + MAX_DELAY + 1)
 
#define MAX_QUANT   255 /* max quant for VC-2 */
 
#define MAX_BLOCKSIZE   32 /* maximum xblen/yblen we support */
 
#define DIRAC_REF_MASK_REF1   1
 DiracBlock->ref flags, if set then the block does MC from the given ref. More...
 
#define DIRAC_REF_MASK_REF2   2
 
#define DIRAC_REF_MASK_GLOBAL   4
 
#define DELAYED_PIC_REF   4
 Value of Picture.reference when Picture is not a reference picture, but is held for delayed output. More...
 
#define CALC_PADDING(size, depth)   (((size + (1 << depth) - 1) >> depth) << depth)
 
#define DIVRNDUP(a, b)   (((a) + (b) - 1) / (b))
 
#define SIGN_CTX(x)   (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
 
#define UNPACK_ARITH(n, type)
 
#define INTRA_DC_PRED(n, type)
 Dirac Specification -> 13.3 intra_dc_prediction(band) More...
 
#define PARSE_VALUES(type, x, gb, ebits, buf1, buf2)
 
#define CHECKEDREAD(dst, cond, errmsg)
 
#define ROLLOFF(i)
 
#define DATA_UNIT_HEADER_SIZE   13
 Dirac Specification -> 9.6 Parse Info Header Syntax. More...
 

Enumerations

enum  dirac_subband {
  subband_ll = 0, subband_hl = 1, subband_lh = 2, subband_hh = 3,
  subband_nb
}
 

Functions

static int divide3 (int x)
 
static DiracFrameremove_frame (DiracFrame *framelist[], int picnum)
 
static int add_frame (DiracFrame *framelist[], int maxframes, DiracFrame *frame)
 
static int alloc_sequence_buffers (DiracContext *s)
 
static int alloc_buffers (DiracContext *s, int stride)
 
static void free_sequence_buffers (DiracContext *s)
 
static av_cold int dirac_decode_init (AVCodecContext *avctx)
 
static void dirac_decode_flush (AVCodecContext *avctx)
 
static av_cold int dirac_decode_end (AVCodecContext *avctx)
 
static int coeff_unpack_golomb (GetBitContext *gb, int qfactor, int qoffset)
 
static void codeblock (DiracContext *s, SubBand *b, GetBitContext *gb, DiracArith *c, int left, int right, int top, int bottom, int blockcnt_one, int is_arith)
 Decode the coeffs in the rectangle defined by left, right, top, bottom [DIRAC_STD] 13.4.3.2 Codeblock unpacking loop. More...
 
static av_always_inline void decode_subband_internal (DiracContext *s, SubBand *b, int is_arith)
 Dirac Specification -> 13.4.2 Non-skipped subbands. More...
 
static int decode_subband_arith (AVCodecContext *avctx, void *b)
 
static int decode_subband_golomb (AVCodecContext *avctx, void *arg)
 
static void decode_component (DiracContext *s, int comp)
 Dirac Specification -> [DIRAC_STD] 13.4.1 core_transform_data() More...
 
static void decode_subband (DiracContext *s, GetBitContext *gb, int quant, int slice_x, int slice_y, int bits_end, SubBand *b1, SubBand *b2)
 
static int decode_lowdelay_slice (AVCodecContext *avctx, void *arg)
 Dirac Specification -> 13.5.2 Slices. More...
 
static int subband_coeffs (DiracContext *s, int x, int y, int p, SliceCoeffs c[MAX_DWT_LEVELS])
 
static int decode_hq_slice (DiracContext *s, DiracSlice *slice, uint8_t *tmp_buf)
 VC-2 Specification -> 13.5.3 hq_slice(sx,sy) More...
 
static int decode_hq_slice_row (AVCodecContext *avctx, void *arg, int jobnr, int threadnr)
 
static int decode_lowdelay (DiracContext *s)
 Dirac Specification -> 13.5.1 low_delay_transform_data() More...
 
static void init_planes (DiracContext *s)
 
static int dirac_unpack_prediction_parameters (DiracContext *s)
 Unpack the motion compensation parameters Dirac Specification -> 11.2 Picture prediction data. More...
 
static int dirac_unpack_idwt_params (DiracContext *s)
 Dirac Specification -> 11.3 Wavelet transform data. More...
 
static int pred_sbsplit (uint8_t *sbsplit, int stride, int x, int y)
 
static int pred_block_mode (DiracBlock *block, int stride, int x, int y, int refmask)
 
static void pred_block_dc (DiracBlock *block, int stride, int x, int y)
 
static void pred_mv (DiracBlock *block, int stride, int x, int y, int ref)
 
static void global_mv (DiracContext *s, DiracBlock *block, int x, int y, int ref)
 
static void decode_block_params (DiracContext *s, DiracArith arith[8], DiracBlock *block, int stride, int x, int y)
 
static void propagate_block_data (DiracBlock *block, int stride, int size)
 Copies the current block to the other blocks covered by the current superblock split mode. More...
 
static int dirac_unpack_block_motion_data (DiracContext *s)
 Dirac Specification -> More...
 
static int weight (int i, int blen, int offset)
 
static void init_obmc_weight_row (Plane *p, uint8_t *obmc_weight, int stride, int left, int right, int wy)
 
static void init_obmc_weight (Plane *p, uint8_t *obmc_weight, int stride, int left, int right, int top, int bottom)
 
static void init_obmc_weights (DiracContext *s, Plane *p, int by)
 
static int mc_subpel (DiracContext *s, DiracBlock *block, const uint8_t *src[5], int x, int y, int ref, int plane)
 For block x,y, determine which of the hpel planes to do bilinear interpolation from and set src[] to the location in each hpel plane to MC from. More...
 
static void add_dc (uint16_t *dst, int dc, int stride, uint8_t *obmc_weight, int xblen, int yblen)
 
static void block_mc (DiracContext *s, DiracBlock *block, uint16_t *mctmp, uint8_t *obmc_weight, int plane, int dstx, int dsty)
 
static void mc_row (DiracContext *s, DiracBlock *block, uint16_t *mctmp, int plane, int dsty)
 
static void select_dsp_funcs (DiracContext *s, int width, int height, int xblen, int yblen)
 
static int interpolate_refplane (DiracContext *s, DiracFrame *ref, int plane, int width, int height)
 
static int dirac_decode_frame_internal (DiracContext *s)
 Dirac Specification -> 13.0 Transform data syntax. More...
 
static int get_buffer_with_edge (AVCodecContext *avctx, AVFrame *f, int flags)
 
static int dirac_decode_picture_header (DiracContext *s)
 Dirac Specification -> 11.1.1 Picture Header. More...
 
static int get_delayed_pic (DiracContext *s, AVFrame *picture, int *got_frame)
 
static int dirac_decode_data_unit (AVCodecContext *avctx, const uint8_t *buf, int size)
 
static int dirac_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *pkt)
 

Variables

static AVOnce dirac_arith_init = AV_ONCE_INIT
 
static const uint8_t epel_weights [4][4][4]
 
AVCodec ff_dirac_decoder
 

Detailed Description

Dirac Decoder.

Author
Marco Gerards marco.nosp@m.@gnu.nosp@m..org, David Conrad, Jordi Ortiz nenjo.nosp@m.rdi@.nosp@m.gmail.nosp@m..com

Definition in file diracdec.c.

Macro Definition Documentation

◆ MAX_REFERENCE_FRAMES

#define MAX_REFERENCE_FRAMES   8

The spec limits this to 3 for frame coding, but in practice can be as high as 6.

Definition at line 50 of file diracdec.c.

Referenced by dirac_decode_picture_header().

◆ MAX_DELAY

#define MAX_DELAY   5 /* limit for main profile for frame coding (TODO: field coding) */

Definition at line 51 of file diracdec.c.

Referenced by dirac_decode_frame().

◆ MAX_FRAMES

#define MAX_FRAMES   (MAX_REFERENCE_FRAMES + MAX_DELAY + 1)

◆ MAX_QUANT

#define MAX_QUANT   255 /* max quant for VC-2 */

Definition at line 53 of file diracdec.c.

◆ MAX_BLOCKSIZE

#define MAX_BLOCKSIZE   32 /* maximum xblen/yblen we support */

◆ DIRAC_REF_MASK_REF1

#define DIRAC_REF_MASK_REF1   1

DiracBlock->ref flags, if set then the block does MC from the given ref.

Definition at line 59 of file diracdec.c.

Referenced by decode_block_params().

◆ DIRAC_REF_MASK_REF2

#define DIRAC_REF_MASK_REF2   2

Definition at line 60 of file diracdec.c.

Referenced by decode_block_params().

◆ DIRAC_REF_MASK_GLOBAL

#define DIRAC_REF_MASK_GLOBAL   4

Definition at line 61 of file diracdec.c.

Referenced by decode_block_params(), and pred_mv().

◆ DELAYED_PIC_REF

#define DELAYED_PIC_REF   4

Value of Picture.reference when Picture is not a reference picture, but is held for delayed output.

Definition at line 67 of file diracdec.c.

Referenced by dirac_decode_frame(), dirac_decode_picture_header(), get_delayed_pic(), h264_field_start(), h264_select_output_frame(), pic_is_unused(), send_next_delayed_frame(), and unreference_pic().

◆ CALC_PADDING

#define CALC_PADDING (   size,
  depth 
)    (((size + (1 << depth) - 1) >> depth) << depth)

Definition at line 69 of file diracdec.c.

Referenced by alloc_sequence_buffers(), dirac_decode_data_unit(), and init_planes().

◆ DIVRNDUP

#define DIVRNDUP (   a,
  b 
)    (((a) + (b) - 1) / (b))

Definition at line 72 of file diracdec.c.

Referenced by alloc_sequence_buffers(), and dirac_unpack_block_motion_data().

◆ SIGN_CTX

#define SIGN_CTX (   x)    (CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))

Definition at line 452 of file diracdec.c.

◆ UNPACK_ARITH

#define UNPACK_ARITH (   n,
  type 
)
Value:
static inline void coeff_unpack_arith_##n(DiracArith *c, int qfactor, int qoffset, \
SubBand *b, type *buf, int x, int y) \
{ \
int sign, sign_pred = 0, pred_ctx = CTX_ZPZN_F1; \
unsigned coeff; \
const int mstride = -(b->stride >> (1+b->pshift)); \
if (b->parent) { \
const type *pbuf = (type *)b->parent->ibuf; \
const int stride = b->parent->stride >> (1+b->parent->pshift); \
pred_ctx += !!pbuf[stride * (y>>1) + (x>>1)] << 1; \
} \
if (b->orientation == subband_hl) \
sign_pred = buf[mstride]; \
if (x) { \
pred_ctx += !(buf[-1] | buf[mstride] | buf[-1 + mstride]); \
if (b->orientation == subband_lh) \
sign_pred = buf[-1]; \
} else { \
pred_ctx += !buf[mstride]; \
} \
coeff = dirac_get_arith_uint(c, pred_ctx, CTX_COEFF_DATA); \
if (coeff) { \
coeff = (coeff * qfactor + qoffset) >> 2; \
sign = dirac_get_arith_bit(c, SIGN_CTX(sign_pred)); \
coeff = (coeff ^ -sign) + sign; \
} \
*buf = coeff; \
} \
#define SIGN_CTX(x)
Definition: diracdec.c:452
const char * b
Definition: vf_curves.c:113
static int dirac_get_arith_uint(DiracArith *c, int follow_ctx, int data_ctx)
Definition: dirac_arith.h:170
int stride
Definition: mace.c:144
Definition: cfhd.h:43
int n
Definition: avisynth_c.h:684
void * buf
Definition: avisynth_c.h:690
static int dirac_get_arith_bit(DiracArith *c, int ctx)
Definition: dirac_arith.h:129
cl_device_type type
static double c[64]
static const double coeff[2][5]
Definition: vf_owdenoise.c:72

Definition at line 454 of file diracdec.c.

◆ INTRA_DC_PRED

#define INTRA_DC_PRED (   n,
  type 
)
Value:
static inline void intra_dc_prediction_##n(SubBand *b) \
{ \
type *buf = (type*)b->ibuf; \
int x, y; \
\
for (x = 1; x < b->width; x++) \
buf[x] += buf[x-1]; \
buf += (b->stride >> (1+b->pshift)); \
for (y = 1; y < b->height; y++) { \
buf[0] += buf[-(b->stride >> (1+b->pshift))]; \
for (x = 1; x < b->width; x++) { \
int pred = buf[x - 1] + buf[x - (b->stride >> (1+b->pshift))] + buf[x - (b->stride >> (1+b->pshift))-1]; \
buf[x] += divide3(pred); \
} \
buf += (b->stride >> (1+b->pshift)); \
} \
} \
static int divide3(int x)
Definition: diracdec.c:251
const char * b
Definition: vf_curves.c:113
Definition: cfhd.h:43
int n
Definition: avisynth_c.h:684
static const float pred[4]
Definition: siprdata.h:259
void * buf
Definition: avisynth_c.h:690
cl_device_type type
for(j=16;j >0;--j)

Dirac Specification -> 13.3 intra_dc_prediction(band)

Definition at line 568 of file diracdec.c.

◆ PARSE_VALUES

#define PARSE_VALUES (   type,
  x,
  gb,
  ebits,
  buf1,
  buf2 
)
Value:
type *buf = (type *)buf1; \
buf[x] = coeff_unpack_golomb(gb, qfactor, qoffset); \
if (get_bits_count(gb) >= ebits) \
return; \
if (buf2) { \
buf = (type *)buf2; \
buf[x] = coeff_unpack_golomb(gb, qfactor, qoffset); \
if (get_bits_count(gb) >= ebits) \
return; \
} \
static int coeff_unpack_golomb(GetBitContext *gb, int qfactor, int qoffset)
Definition: diracdec.c:443
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:200
void * buf
Definition: avisynth_c.h:690
cl_device_type type

Definition at line 687 of file diracdec.c.

Referenced by decode_subband().

◆ CHECKEDREAD

#define CHECKEDREAD (   dst,
  cond,
  errmsg 
)
Value:
if (cond) { \
av_log(s->avctx, AV_LOG_ERROR, errmsg); \
}\
dst = tmp;
const char * s
Definition: avisynth_c.h:768
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
int(* cond)(enum AVPixelFormat pix_fmt)
Definition: pixdesc_query.c:28
static unsigned get_interleaved_ue_golomb(GetBitContext *gb)
Definition: golomb.h:115
static uint8_t tmp[11]
Definition: aes_ctr.c:26

Referenced by dirac_unpack_idwt_params().

◆ ROLLOFF

#define ROLLOFF (   i)
Value:
offset == 1 ? ((i) ? 5 : 3) : \
(1 + (6*(i) + offset - 1) / (2*offset - 1))
static const uint8_t offset[127][2]
Definition: vf_spp.c:92

Referenced by weight().

◆ DATA_UNIT_HEADER_SIZE

#define DATA_UNIT_HEADER_SIZE   13

Dirac Specification -> 9.6 Parse Info Header Syntax.

parse_info() 4 byte start code + byte parse code + 4 byte size + 4 byte previous size

Definition at line 2076 of file diracdec.c.

Referenced by dirac_decode_data_unit(), and dirac_decode_frame().

Enumeration Type Documentation

◆ dirac_subband

Enumerator
subband_ll 
subband_hl 
subband_lh 
subband_hh 
subband_nb 

Definition at line 242 of file diracdec.c.

Function Documentation

◆ divide3()

static int divide3 ( int  x)
inlinestatic

Definition at line 251 of file diracdec.c.

Referenced by pred_block_dc().

◆ remove_frame()

static DiracFrame* remove_frame ( DiracFrame framelist[],
int  picnum 
)
static

Definition at line 256 of file diracdec.c.

Referenced by dirac_decode_frame(), and dirac_decode_picture_header().

◆ add_frame()

static int add_frame ( DiracFrame framelist[],
int  maxframes,
DiracFrame frame 
)
static

Definition at line 274 of file diracdec.c.

Referenced by dirac_decode_frame(), and dirac_decode_picture_header().

◆ alloc_sequence_buffers()

static int alloc_sequence_buffers ( DiracContext s)
static

Definition at line 285 of file diracdec.c.

Referenced by dirac_decode_data_unit().

◆ alloc_buffers()

static int alloc_buffers ( DiracContext s,
int  stride 
)
static

Definition at line 323 of file diracdec.c.

Referenced by dirac_decode_data_unit().

◆ free_sequence_buffers()

static void free_sequence_buffers ( DiracContext s)
static

Definition at line 352 of file diracdec.c.

Referenced by dirac_decode_data_unit(), and dirac_decode_flush().

◆ dirac_decode_init()

static av_cold int dirac_decode_init ( AVCodecContext avctx)
static

Definition at line 386 of file diracdec.c.

◆ dirac_decode_flush()

static void dirac_decode_flush ( AVCodecContext avctx)
static

Definition at line 418 of file diracdec.c.

Referenced by dirac_decode_end().

◆ dirac_decode_end()

static av_cold int dirac_decode_end ( AVCodecContext avctx)
static

Definition at line 426 of file diracdec.c.

◆ coeff_unpack_golomb()

static int coeff_unpack_golomb ( GetBitContext gb,
int  qfactor,
int  qoffset 
)
inlinestatic

Definition at line 443 of file diracdec.c.

Referenced by codeblock().

◆ codeblock()

static void codeblock ( DiracContext s,
SubBand b,
GetBitContext gb,
DiracArith c,
int  left,
int  right,
int  top,
int  bottom,
int  blockcnt_one,
int  is_arith 
)
inlinestatic

Decode the coeffs in the rectangle defined by left, right, top, bottom [DIRAC_STD] 13.4.3.2 Codeblock unpacking loop.

codeblock()

Definition at line 491 of file diracdec.c.

Referenced by decode_subband_internal().

◆ decode_subband_internal()

static av_always_inline void decode_subband_internal ( DiracContext s,
SubBand b,
int  is_arith 
)
static

Dirac Specification -> 13.4.2 Non-skipped subbands.

subband_coeffs()

Definition at line 596 of file diracdec.c.

Referenced by decode_subband_arith(), and decode_subband_golomb().

◆ decode_subband_arith()

static int decode_subband_arith ( AVCodecContext avctx,
void b 
)
static

Definition at line 634 of file diracdec.c.

Referenced by decode_component().

◆ decode_subband_golomb()

static int decode_subband_golomb ( AVCodecContext avctx,
void arg 
)
static

Definition at line 641 of file diracdec.c.

Referenced by decode_component().

◆ decode_component()

static void decode_component ( DiracContext s,
int  comp 
)
static

Dirac Specification -> [DIRAC_STD] 13.4.1 core_transform_data()

Definition at line 653 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ decode_subband()

static void decode_subband ( DiracContext s,
GetBitContext gb,
int  quant,
int  slice_x,
int  slice_y,
int  bits_end,
SubBand b1,
SubBand b2 
)
static

Definition at line 699 of file diracdec.c.

Referenced by decode_lowdelay_slice().

◆ decode_lowdelay_slice()

static int decode_lowdelay_slice ( AVCodecContext avctx,
void arg 
)
static

Dirac Specification -> 13.5.2 Slices.

slice(sx,sy)

Definition at line 751 of file diracdec.c.

Referenced by decode_lowdelay().

◆ subband_coeffs()

static int subband_coeffs ( DiracContext s,
int  x,
int  y,
int  p,
SliceCoeffs  c[MAX_DWT_LEVELS] 
)
static

Definition at line 797 of file diracdec.c.

Referenced by decode_hq_slice(), and decode_lowdelay().

◆ decode_hq_slice()

static int decode_hq_slice ( DiracContext s,
DiracSlice slice,
uint8_t tmp_buf 
)
static

VC-2 Specification -> 13.5.3 hq_slice(sx,sy)

Definition at line 818 of file diracdec.c.

Referenced by decode_hq_slice_row().

◆ decode_hq_slice_row()

static int decode_hq_slice_row ( AVCodecContext avctx,
void arg,
int  jobnr,
int  threadnr 
)
static

Definition at line 892 of file diracdec.c.

Referenced by decode_lowdelay().

◆ decode_lowdelay()

static int decode_lowdelay ( DiracContext s)
static

Dirac Specification -> 13.5.1 low_delay_transform_data()

Definition at line 907 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ init_planes()

static void init_planes ( DiracContext s)
static

Definition at line 1021 of file diracdec.c.

Referenced by dirac_decode_picture_header().

◆ dirac_unpack_prediction_parameters()

static int dirac_unpack_prediction_parameters ( DiracContext s)
static

Unpack the motion compensation parameters Dirac Specification -> 11.2 Picture prediction data.

picture_prediction()

Definition at line 1075 of file diracdec.c.

Referenced by dirac_decode_picture_header().

◆ dirac_unpack_idwt_params()

static int dirac_unpack_idwt_params ( DiracContext s)
static

Dirac Specification -> 11.3 Wavelet transform data.

wavelet_transform()

Definition at line 1203 of file diracdec.c.

Referenced by dirac_decode_picture_header().

◆ pred_sbsplit()

static int pred_sbsplit ( uint8_t sbsplit,
int  stride,
int  x,
int  y 
)
inlinestatic

Definition at line 1294 of file diracdec.c.

Referenced by dirac_unpack_block_motion_data().

◆ pred_block_mode()

static int pred_block_mode ( DiracBlock block,
int  stride,
int  x,
int  y,
int  refmask 
)
inlinestatic

Definition at line 1308 of file diracdec.c.

Referenced by decode_block_params().

◆ pred_block_dc()

static void pred_block_dc ( DiracBlock block,
int  stride,
int  x,
int  y 
)
inlinestatic

Definition at line 1324 of file diracdec.c.

Referenced by decode_block_params().

◆ pred_mv()

static void pred_mv ( DiracBlock block,
int  stride,
int  x,
int  y,
int  ref 
)
inlinestatic

◆ global_mv()

static void global_mv ( DiracContext s,
DiracBlock block,
int  x,
int  y,
int  ref 
)
static

Definition at line 1393 of file diracdec.c.

Referenced by decode_block_params().

◆ decode_block_params()

static void decode_block_params ( DiracContext s,
DiracArith  arith[8],
DiracBlock block,
int  stride,
int  x,
int  y 
)
static

Definition at line 1409 of file diracdec.c.

Referenced by dirac_unpack_block_motion_data().

◆ propagate_block_data()

static void propagate_block_data ( DiracBlock block,
int  stride,
int  size 
)
static

Copies the current block to the other blocks covered by the current superblock split mode.

Definition at line 1449 of file diracdec.c.

Referenced by dirac_unpack_block_motion_data().

◆ dirac_unpack_block_motion_data()

static int dirac_unpack_block_motion_data ( DiracContext s)
static

Dirac Specification ->

  1. Block motion data syntax

Definition at line 1468 of file diracdec.c.

Referenced by dirac_decode_picture_header().

◆ weight()

static int weight ( int  i,
int  blen,
int  offset 
)
static

Definition at line 1523 of file diracdec.c.

Referenced by apply_delogo(), aptx_process_subband(), celt_gauge_psy_weight(), check_decorrelate_stereo(), dv_init_enc_block(), encode_mb_internal(), ff_h264_biweight_pixels4_8_mmi(), ff_h264_weight_pixels16_8_mmi(), ff_h264_weight_pixels4_8_mmi(), ff_lpc_calc_coefs(), ff_lpc_calc_ref_coefs_f(), find_form_factor(), guess_dc(), hevc_biwgt_copy_12w_msa(), hevc_biwgt_copy_16w_msa(), hevc_biwgt_copy_24w_msa(), hevc_biwgt_copy_32w_msa(), hevc_biwgt_copy_48w_msa(), hevc_biwgt_copy_4w_msa(), hevc_biwgt_copy_64w_msa(), hevc_biwgt_copy_6w_msa(), hevc_biwgt_copy_8w_msa(), hevc_hv_biwgt_4t_12w_msa(), hevc_hv_biwgt_4t_4multx8mult_msa(), hevc_hv_biwgt_4t_4x2_msa(), hevc_hv_biwgt_4t_4x4_msa(), hevc_hv_biwgt_4t_6w_msa(), hevc_hv_biwgt_4t_8multx4_msa(), hevc_hv_biwgt_4t_8multx4mult_msa(), hevc_hv_biwgt_4t_8x2_msa(), hevc_hv_biwgt_4t_8x6_msa(), hevc_hv_biwgt_8t_12w_msa(), hevc_hv_biwgt_8t_4w_msa(), hevc_hv_biwgt_8t_8multx2mult_msa(), hevc_hz_biwgt_4t_12w_msa(), hevc_hz_biwgt_4t_16w_msa(), hevc_hz_biwgt_4t_24w_msa(), hevc_hz_biwgt_4t_32w_msa(), hevc_hz_biwgt_4t_4x2_msa(), hevc_hz_biwgt_4t_4x4_msa(), hevc_hz_biwgt_4t_4x8multiple_msa(), hevc_hz_biwgt_4t_6w_msa(), hevc_hz_biwgt_4t_8x2_msa(), hevc_hz_biwgt_4t_8x4multiple_msa(), hevc_hz_biwgt_4t_8x6_msa(), hevc_hz_biwgt_8t_12w_msa(), hevc_hz_biwgt_8t_16w_msa(), hevc_hz_biwgt_8t_24w_msa(), hevc_hz_biwgt_8t_32w_msa(), hevc_hz_biwgt_8t_48w_msa(), hevc_hz_biwgt_8t_4w_msa(), hevc_hz_biwgt_8t_64w_msa(), hevc_hz_biwgt_8t_8w_msa(), hevc_vt_biwgt_4t_12w_msa(), hevc_vt_biwgt_4t_16w_msa(), hevc_vt_biwgt_4t_24w_msa(), hevc_vt_biwgt_4t_32w_msa(), hevc_vt_biwgt_4t_4x2_msa(), hevc_vt_biwgt_4t_4x4_msa(), hevc_vt_biwgt_4t_4x8multiple_msa(), hevc_vt_biwgt_4t_6w_msa(), hevc_vt_biwgt_4t_8x2_msa(), hevc_vt_biwgt_4t_8x4multiple_msa(), hevc_vt_biwgt_4t_8x6_msa(), hevc_vt_biwgt_8t_12w_msa(), hevc_vt_biwgt_8t_16multx2mult_msa(), hevc_vt_biwgt_8t_4w_msa(), hevc_vt_biwgt_8t_8w_msa(), init_obmc_weight(), init_obmc_weight_row(), interpolate_lpc(), lsp_quantize(), mc_block(), nlmeans_slice(), silk_decode_lpc(), and try_8x8basis().

◆ init_obmc_weight_row()

static void init_obmc_weight_row ( Plane p,
uint8_t obmc_weight,
int  stride,
int  left,
int  right,
int  wy 
)
static

Definition at line 1535 of file diracdec.c.

Referenced by init_obmc_weight().

◆ init_obmc_weight()

static void init_obmc_weight ( Plane p,
uint8_t obmc_weight,
int  stride,
int  left,
int  right,
int  top,
int  bottom 
)
static

Definition at line 1549 of file diracdec.c.

Referenced by init_obmc_weights().

◆ init_obmc_weights()

static void init_obmc_weights ( DiracContext s,
Plane p,
int  by 
)
static

Definition at line 1568 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ mc_subpel()

static int mc_subpel ( DiracContext s,
DiracBlock block,
const uint8_t src[5],
int  x,
int  y,
int  ref,
int  plane 
)
static

For block x,y, determine which of the hpel planes to do bilinear interpolation from and set src[] to the location in each hpel plane to MC from.

Returns
the index of the put_dirac_pixels_tab function to use 0 for 1 plane (fpel,hpel), 1 for 2 planes (qpel), 2 for 4 planes (qpel), and 3 for epel

Definition at line 1608 of file diracdec.c.

Referenced by block_mc().

◆ add_dc()

static void add_dc ( uint16_t *  dst,
int  dc,
int  stride,
uint8_t obmc_weight,
int  xblen,
int  yblen 
)
static

Definition at line 1703 of file diracdec.c.

Referenced by block_mc().

◆ block_mc()

static void block_mc ( DiracContext s,
DiracBlock block,
uint16_t *  mctmp,
uint8_t obmc_weight,
int  plane,
int  dstx,
int  dsty 
)
static

Definition at line 1719 of file diracdec.c.

Referenced by mc_row().

◆ mc_row()

static void mc_row ( DiracContext s,
DiracBlock block,
uint16_t *  mctmp,
int  plane,
int  dsty 
)
static

Definition at line 1755 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ select_dsp_funcs()

static void select_dsp_funcs ( DiracContext s,
int  width,
int  height,
int  xblen,
int  yblen 
)
static

Definition at line 1771 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ interpolate_refplane()

static int interpolate_refplane ( DiracContext s,
DiracFrame ref,
int  plane,
int  width,
int  height 
)
static

Definition at line 1791 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ dirac_decode_frame_internal()

static int dirac_decode_frame_internal ( DiracContext s)
static

Dirac Specification -> 13.0 Transform data syntax.

transform_data()

Definition at line 1832 of file diracdec.c.

Referenced by dirac_decode_data_unit().

◆ get_buffer_with_edge()

static int get_buffer_with_edge ( AVCodecContext avctx,
AVFrame f,
int  flags 
)
static

Definition at line 1927 of file diracdec.c.

Referenced by dirac_decode_data_unit(), and dirac_decode_picture_header().

◆ dirac_decode_picture_header()

static int dirac_decode_picture_header ( DiracContext s)
static

Dirac Specification -> 11.1.1 Picture Header.

picture_header()

Definition at line 1957 of file diracdec.c.

Referenced by dirac_decode_data_unit().

◆ get_delayed_pic()

static int get_delayed_pic ( DiracContext s,
AVFrame picture,
int got_frame 
)
static

Definition at line 2045 of file diracdec.c.

Referenced by dirac_decode_frame().

◆ dirac_decode_data_unit()

static int dirac_decode_data_unit ( AVCodecContext avctx,
const uint8_t buf,
int  size 
)
static

Definition at line 2080 of file diracdec.c.

Referenced by dirac_decode_frame().

◆ dirac_decode_frame()

static int dirac_decode_frame ( AVCodecContext avctx,
void data,
int got_frame,
AVPacket pkt 
)
static

Definition at line 2222 of file diracdec.c.

Variable Documentation

◆ dirac_arith_init

AVOnce dirac_arith_init = AV_ONCE_INIT
static

Definition at line 384 of file diracdec.c.

Referenced by dirac_decode_init().

◆ epel_weights

const uint8_t epel_weights[4][4][4]
static
Initial value:
= {
{{ 16, 0, 0, 0 },
{ 12, 4, 0, 0 },
{ 8, 8, 0, 0 },
{ 4, 12, 0, 0 }},
{{ 12, 0, 4, 0 },
{ 9, 3, 3, 1 },
{ 6, 6, 2, 2 },
{ 3, 9, 1, 3 }},
{{ 8, 0, 8, 0 },
{ 6, 2, 6, 2 },
{ 4, 4, 4, 4 },
{ 2, 6, 2, 6 }},
{{ 4, 0, 12, 0 },
{ 3, 1, 9, 3 },
{ 2, 2, 6, 6 },
{ 1, 3, 3, 9 }}
}

Definition at line 1581 of file diracdec.c.

Referenced by mc_subpel().

◆ ff_dirac_decoder

AVCodec ff_dirac_decoder
Initial value:
= {
.name = "dirac",
.long_name = NULL_IF_CONFIG_SMALL("BBC Dirac VC-2"),
.priv_data_size = sizeof(DiracContext),
.close = dirac_decode_end,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}
static av_cold int dirac_decode_end(AVCodecContext *avctx)
Definition: diracdec.c:426
static void flush(AVCodecContext *avctx)
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static void dirac_decode_flush(AVCodecContext *avctx)
Definition: diracdec.c:418
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: avcodec.h:984
#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:40
static av_cold int dirac_decode_init(AVCodecContext *avctx)
Definition: diracdec.c:386
static int dirac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *pkt)
Definition: diracdec.c:2222
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:1019
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959

Definition at line 2318 of file diracdec.c.