FFmpeg
Loading...
Searching...
No Matches
diracdec.c File Reference

Dirac Decoder. More...

#include "libavutil/mem.h"
#include "libavutil/mem_internal.h"
#include "libavutil/pixdesc.h"
#include "libavutil/thread.h"
#include "avcodec.h"
#include "get_bits.h"
#include "codec_internal.h"
#include "decode.h"
#include "golomb.h"
#include "dirac_arith.h"
#include "dirac_vlc.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 EDGE_WIDTH   16
 
#define MAX_REFERENCE_FRAMES   8
 The spec limits this to 3 for frame coding, but in practice can be as high as 6.
 
#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.
 
#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.
 
#define CALC_PADDING(size, depth)
 
#define DIVRNDUP(a, b)
 
#define SIGN_CTX(x)
 
#define UNPACK_ARITH(n, type)
 
#define INTRA_DC_PRED(n, type)
 Dirac Specification -> 13.3 intra_dc_prediction(band)
 
#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.
 

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[], unsigned 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 av_cold void free_sequence_buffers (DiracContext *s)
 
static av_cold int dirac_decode_init (AVCodecContext *avctx)
 
static av_cold 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 int codeblock (const 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.
 
static av_always_inline int decode_subband_internal (const DiracContext *s, SubBand *b, int is_arith)
 Dirac Specification -> 13.4.2 Non-skipped subbands.
 
static int decode_subband_arith (AVCodecContext *avctx, void *b)
 
static int decode_subband_golomb (AVCodecContext *avctx, void *arg)
 
static int decode_component (DiracContext *s, int comp)
 Dirac Specification -> [DIRAC_STD] 13.4.1 core_transform_data()
 
static void decode_subband (const DiracContext *s, GetBitContext *gb, int quant, int slice_x, int slice_y, int bits_end, const SubBand *b1, const SubBand *b2)
 
static int decode_lowdelay_slice (AVCodecContext *avctx, void *arg)
 Dirac Specification -> 13.5.2 Slices.
 
static int subband_coeffs (const DiracContext *s, int x, int y, int p, SliceCoeffs c[MAX_DWT_LEVELS])
 
static int decode_hq_slice (const DiracContext *s, DiracSlice *slice, uint8_t *tmp_buf)
 VC-2 Specification -> 13.5.3 hq_slice(sx,sy)
 
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()
 
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.
 
static int dirac_unpack_idwt_params (DiracContext *s)
 Dirac Specification -> 11.3 Wavelet transform data.
 
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.
 
static int dirac_unpack_block_motion_data (DiracContext *s)
 Dirac Specification ->
 
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.
 
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.
 
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.
 
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, AVFrame *picture, int *got_frame, AVPacket *pkt)
 

Variables

static AVOnce dirac_arith_init = AV_ONCE_INIT
 
static const uint8_t epel_weights [4][4][4]
 
const FFCodec 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

◆ EDGE_WIDTH

◆ 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 52 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 53 of file diracdec.c.

Referenced by dirac_decode_frame(), evrc_decode_frame(), and postfilter().

◆ MAX_FRAMES

◆ MAX_QUANT

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

Definition at line 55 of file diracdec.c.

◆ MAX_BLOCKSIZE

◆ 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 61 of file diracdec.c.

Referenced by decode_block_params().

◆ DIRAC_REF_MASK_REF2

#define DIRAC_REF_MASK_REF2   2

Definition at line 62 of file diracdec.c.

Referenced by decode_block_params().

◆ DIRAC_REF_MASK_GLOBAL

#define DIRAC_REF_MASK_GLOBAL   4

Definition at line 63 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 69 of file diracdec.c.

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

◆ CALC_PADDING

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

Definition at line 71 of file diracdec.c.

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

◆ DIVRNDUP

#define DIVRNDUP ( a,
b )
Value:
(((a) + (b) - 1) / (b))
int a
#define b
Definition input.c:43

Definition at line 74 of file diracdec.c.

Referenced by alloc_sequence_buffers(), and dirac_unpack_block_motion_data().

◆ SIGN_CTX

#define SIGN_CTX ( x)
Value:
(CTX_SIGN_ZERO + ((x) > 0) - ((x) < 0))
@ CTX_SIGN_ZERO
Definition dirac_arith.h:53

Definition at line 450 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]; \
} \
if (coeff) { \
coeff = (coeff * qfactor + qoffset) >> 2; \
sign = dirac_get_arith_bit(c, SIGN_CTX(sign_pred)); \
coeff = (coeff ^ -sign) + sign; \
} \
*buf = coeff; \
} \
static int dirac_get_arith_uint(DiracArith *c, int follow_ctx, int data_ctx)
@ CTX_ZPZN_F1
Definition dirac_arith.h:37
@ CTX_COEFF_DATA
Definition dirac_arith.h:51
static int dirac_get_arith_bit(DiracArith *c, int ctx)
cl_device_type type
#define SIGN_CTX(x)
Definition diracdec.c:450
@ subband_hl
Definition diracdec.c:246
@ subband_lh
Definition diracdec.c:247
#define stride
static const double coeff[2][5]
static double c[64]

Definition at line 452 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:253
static const float pred[4]
Definition siprdata.h:259

Dirac Specification -> 13.3 intra_dc_prediction(band)

Definition at line 571 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 get_bits_count(const GetBitContext *s)
Definition get_bits.h:254
static int coeff_unpack_golomb(GetBitContext *gb, int qfactor, int qoffset)
Definition diracdec.c:441

Definition at line 713 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;
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
#define s(width, name)
Definition cbs_vp9.c:198
static unsigned get_interleaved_ue_golomb(GetBitContext *gb)
Definition golomb.h:143
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
int(* cond)(enum AVPixelFormat pix_fmt)
static uint8_t tmp[40]
Definition aes_ctr.c:52

Referenced by dirac_unpack_idwt_params().

◆ ROLLOFF

#define ROLLOFF ( i)
Value:
offset == 1 ? ((i) ? 5 : 3) : \
(1 + (6*(i) + offset - 1) / (2*offset - 1))
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
unsigned offset
Definition libaomenc.c:763

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 2118 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 244 of file diracdec.c.

Function Documentation

◆ divide3()

static int divide3 ( int x)
inlinestatic

Definition at line 253 of file diracdec.c.

Referenced by pred_block_dc().

◆ remove_frame()

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

Definition at line 258 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 276 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 287 of file diracdec.c.

Referenced by dirac_decode_data_unit().

◆ alloc_buffers()

static int alloc_buffers ( DiracContext * s,
int stride )
static

Definition at line 325 of file diracdec.c.

Referenced by dirac_decode_data_unit().

◆ free_sequence_buffers()

static av_cold void free_sequence_buffers ( DiracContext * s)
static

Definition at line 354 of file diracdec.c.

Referenced by dirac_decode_data_unit(), dirac_decode_end(), and dirac_decode_flush().

◆ dirac_decode_init()

static av_cold int dirac_decode_init ( AVCodecContext * avctx)
static

Definition at line 388 of file diracdec.c.

◆ dirac_decode_flush()

static av_cold void dirac_decode_flush ( AVCodecContext * avctx)
static

Definition at line 416 of file diracdec.c.

◆ dirac_decode_end()

static av_cold int dirac_decode_end ( AVCodecContext * avctx)
static

Definition at line 424 of file diracdec.c.

◆ coeff_unpack_golomb()

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

Definition at line 441 of file diracdec.c.

◆ codeblock()

static int codeblock ( const 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 489 of file diracdec.c.

Referenced by codeblock(), and decode_subband_internal().

◆ decode_subband_internal()

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

Dirac Specification -> 13.4.2 Non-skipped subbands.

subband_coeffs()

Definition at line 599 of file diracdec.c.

Referenced by decode_subband_arith(), decode_subband_golomb(), and decode_subband_internal().

◆ decode_subband_arith()

static int decode_subband_arith ( AVCodecContext * avctx,
void * b )
static

Definition at line 642 of file diracdec.c.

Referenced by decode_component().

◆ decode_subband_golomb()

static int decode_subband_golomb ( AVCodecContext * avctx,
void * arg )
static

Definition at line 648 of file diracdec.c.

Referenced by decode_component().

◆ decode_component()

static int decode_component ( DiracContext * s,
int comp )
static

Dirac Specification -> [DIRAC_STD] 13.4.1 core_transform_data()

Definition at line 659 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ decode_subband()

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

Definition at line 725 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 777 of file diracdec.c.

Referenced by decode_lowdelay().

◆ subband_coeffs()

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

Definition at line 823 of file diracdec.c.

Referenced by decode_hq_slice(), and decode_lowdelay().

◆ decode_hq_slice()

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

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

Definition at line 844 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 918 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 933 of file diracdec.c.

Referenced by dirac_decode_frame_internal().

◆ init_planes()

static void init_planes ( DiracContext * s)
static

Definition at line 1051 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 1105 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 1233 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 1329 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 1343 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 1359 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 1428 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 1444 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 1484 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 1503 of file diracdec.c.

Referenced by dirac_decode_picture_header().

◆ weight()

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

Definition at line 1563 of file diracdec.c.

◆ 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 1575 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 1589 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 1608 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 1648 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 1743 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 1759 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 1795 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 1811 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 1831 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 1872 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 1969 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 1999 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 2087 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 2122 of file diracdec.c.

Referenced by dirac_decode_frame().

◆ dirac_decode_frame()

static int dirac_decode_frame ( AVCodecContext * avctx,
AVFrame * picture,
int * got_frame,
AVPacket * pkt )
static

Definition at line 2267 of file diracdec.c.

Variable Documentation

◆ dirac_arith_init

AVOnce dirac_arith_init = AV_ONCE_INIT
static

Definition at line 386 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 1621 of file diracdec.c.

Referenced by mc_subpel().

◆ ff_dirac_decoder

const FFCodec ff_dirac_decoder
Initial value:
= {
.p.name = "dirac",
CODEC_LONG_NAME("BBC Dirac VC-2"),
.p.type = AVMEDIA_TYPE_VIDEO,
.priv_data_size = sizeof(DiracContext),
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#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 codec.h:79
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition codec.h:102
@ AV_CODEC_ID_DIRAC
Definition codec_id.h:166
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static av_cold void dirac_decode_flush(AVCodecContext *avctx)
Definition diracdec.c:416
static av_cold int dirac_decode_init(AVCodecContext *avctx)
Definition diracdec.c:388
static int dirac_decode_frame(AVCodecContext *avctx, AVFrame *picture, int *got_frame, AVPacket *pkt)
Definition diracdec.c:2267
static av_cold int dirac_decode_end(AVCodecContext *avctx)
Definition diracdec.c:424

Definition at line 2362 of file diracdec.c.