libavcodec/bink.c File Reference
#include "libavutil/imgutils.h"
#include "libavutil/internal.h"
#include "avcodec.h"
#include "dsputil.h"
#include "binkdata.h"
#include "binkdsp.h"
#include "hpeldsp.h"
#include "internal.h"
#include "mathops.h"
#include "get_bits.h"
Include dependency graph for libavcodec/bink.c:

Go to the source code of this file.

Data Structures

struct  Tree
 data needed to decode 4-bit Huffman-coded value More...
 
struct  Bundle
 data structure used for decoding single Bink data type More...
 
struct  BinkContext
 

Macros

#define BITSTREAM_READER_LE
 
#define BINK_FLAG_ALPHA   0x00100000
 
#define BINK_FLAG_GRAY   0x00020000
 
#define GET_HUFF(gb, tree)
 
#define CHECK_READ_VAL(gb, b, t)
 common check before starting decoding bundle data More...
 
#define DC_START_BITS   11
 number of bits used to store first DC value in bundle More...
 
#define C   (1LL<<30)
 

Typedefs

typedef struct Tree Tree
 data needed to decode 4-bit Huffman-coded value More...
 
typedef struct Bundle Bundle
 data structure used for decoding single Bink data type More...
 
typedef struct BinkContext BinkContext
 

Enumerations

enum  OldSources {
  BINKB_SRC_BLOCK_TYPES = 0, BINKB_SRC_COLORS, BINKB_SRC_PATTERN, BINKB_SRC_X_OFF,
  BINKB_SRC_Y_OFF, BINKB_SRC_INTRA_DC, BINKB_SRC_INTER_DC, BINKB_SRC_INTRA_Q,
  BINKB_SRC_INTER_Q, BINKB_SRC_INTER_COEFS, BINKB_NB_SRC
}
 IDs for different data types used in old version of Bink video codec. More...
 
enum  Sources {
  BINK_SRC_BLOCK_TYPES = 0, BINK_SRC_SUB_BLOCK_TYPES, BINK_SRC_COLORS, BINK_SRC_PATTERN,
  BINK_SRC_X_OFF, BINK_SRC_Y_OFF, BINK_SRC_INTRA_DC, BINK_SRC_INTER_DC,
  BINK_SRC_RUN, BINK_NB_SRC
}
 IDs for different data types used in Bink video codec. More...
 
enum  BlockTypes {
  SKIP_BLOCK = 0, SCALED_BLOCK, MOTION_BLOCK, RUN_BLOCK,
  RESIDUE_BLOCK, INTRA_BLOCK, FILL_BLOCK, INTER_BLOCK,
  PATTERN_BLOCK, RAW_BLOCK
}
 Bink video block types. More...
 

Functions

static void init_lengths (BinkContext *c, int width, int bw)
 Initialize length length in all bundles. More...
 
static av_cold int init_bundles (BinkContext *c)
 Allocate memory for bundles. More...
 
static av_cold void free_bundles (BinkContext *c)
 Free memory used by bundles. More...
 
static void merge (GetBitContext *gb, uint8_t *dst, uint8_t *src, int size)
 Merge two consequent lists of equal size depending on bits read. More...
 
static void read_tree (GetBitContext *gb, Tree *tree)
 Read information about Huffman tree used to decode data. More...
 
static void read_bundle (GetBitContext *gb, BinkContext *c, int bundle_num)
 Prepare bundle for decoding data. More...
 
static int read_runs (AVCodecContext *avctx, GetBitContext *gb, Bundle *b)
 
static int read_motion_values (AVCodecContext *avctx, GetBitContext *gb, Bundle *b)
 
static int read_block_types (AVCodecContext *avctx, GetBitContext *gb, Bundle *b)
 
static int read_patterns (AVCodecContext *avctx, GetBitContext *gb, Bundle *b)
 
static int read_colors (GetBitContext *gb, Bundle *b, BinkContext *c)
 
static int read_dcs (AVCodecContext *avctx, GetBitContext *gb, Bundle *b, int start_bits, int has_sign)
 
static int get_value (BinkContext *c, int bundle)
 Retrieve next value from bundle. More...
 
static void binkb_init_bundle (BinkContext *c, int bundle_num)
 
static void binkb_init_bundles (BinkContext *c)
 
static int binkb_read_bundle (BinkContext *c, GetBitContext *gb, int bundle_num)
 
static int binkb_get_value (BinkContext *c, int bundle_num)
 
static int read_dct_coeffs (GetBitContext *gb, int32_t block[64], const uint8_t *scan, const int32_t quant_matrices[16][64], int q)
 Read 8x8 block of DCT coefficients. More...
 
static int read_residue (GetBitContext *gb, int16_t block[64], int masks_count)
 Read 8x8 block with residue after motion compensation. More...
 
static void put_pixels8x8_overlapped (uint8_t *dst, uint8_t *src, int stride)
 Copy 8x8 block from source to destination, where src and dst may be overlapped. More...
 
static int binkb_decode_plane (BinkContext *c, AVFrame *frame, GetBitContext *gb, int plane_idx, int is_key, int is_chroma)
 
static int bink_decode_plane (BinkContext *c, AVFrame *frame, GetBitContext *gb, int plane_idx, int is_chroma)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *pkt)
 
static av_cold void binkb_calc_quant (void)
 Caclulate quantization tables for version b. More...
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static av_cold int decode_end (AVCodecContext *avctx)
 

Variables

static VLC bink_trees [16]
 
static const int binkb_bundle_sizes [BINKB_NB_SRC]
 
static const int binkb_bundle_signed [BINKB_NB_SRC]
 
static int32_t binkb_intra_quant [16][64]
 
static int32_t binkb_inter_quant [16][64]
 
static const uint8_t bink_rlelens [4] = { 4, 8, 12, 32 }
 
AVCodec ff_bink_decoder
 

Macro Definition Documentation

#define BINK_FLAG_ALPHA   0x00100000

Definition at line 36 of file libavcodec/bink.c.

Referenced by decode_init().

#define BINK_FLAG_GRAY   0x00020000

Definition at line 37 of file libavcodec/bink.c.

#define BITSTREAM_READER_LE

Definition at line 33 of file libavcodec/bink.c.

#define CHECK_READ_VAL (   gb,
  b,
  t 
)
Value:
if (!b->cur_dec || (b->cur_dec > b->cur_ptr)) \
t = get_bits(gb, b->len); \
if (!t) { \
b->cur_dec = NULL; \
return 0; \
} \
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
#define b
Definition: input.c:42
t
Definition: genspecsines3.m:6
NULL
Definition: eval.c:55
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame This method is called when a frame is wanted on an output For an it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return it should return

common check before starting decoding bundle data

Parameters
gbcontext for reading bits
bbundle
tvariable where number of elements to decode will be stored

Definition at line 305 of file libavcodec/bink.c.

Referenced by binkb_read_bundle(), read_block_types(), read_colors(), read_dcs(), read_motion_values(), read_patterns(), and read_runs().

#define DC_START_BITS   11

number of bits used to store first DC value in bundle

Definition at line 464 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

#define GET_HUFF (   gb,
  tree 
)
Value:
(tree).syms[get_vlc2(gb, bink_trees[(tree).vlc_num].table,\
bink_trees[(tree).vlc_num].bits, 1)]
uint8_t bits
Definition: crc.c:216
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:524
static VLC bink_trees[16]
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65

Definition at line 95 of file libavcodec/bink.c.

Referenced by read_block_types(), read_colors(), read_motion_values(), read_patterns(), and read_runs().

Typedef Documentation

typedef struct BinkContext BinkContext
typedef struct Bundle Bundle

data structure used for decoding single Bink data type

typedef struct Tree Tree

data needed to decode 4-bit Huffman-coded value

Enumeration Type Documentation

enum BlockTypes

Bink video block types.

Enumerator
SKIP_BLOCK 

skipped block

SCALED_BLOCK 

block has size 16x16

MOTION_BLOCK 

block is copied from previous frame with some offset

RUN_BLOCK 

block is composed from runs of colours with custom scan order

RESIDUE_BLOCK 

motion block with some difference added

INTRA_BLOCK 

intra DCT block

FILL_BLOCK 

block is filled with single colour

INTER_BLOCK 

motion block with DCT applied to the difference

PATTERN_BLOCK 

block is filled with two colours following custom pattern

RAW_BLOCK 

uncoded 8x8 block

Definition at line 131 of file libavcodec/bink.c.

enum OldSources

IDs for different data types used in old version of Bink video codec.

Enumerator
BINKB_SRC_BLOCK_TYPES 

8x8 block types

BINKB_SRC_COLORS 

pixel values used for different block types

BINKB_SRC_PATTERN 

8-bit values for 2-colour pattern fill

BINKB_SRC_X_OFF 

X components of motion value.

BINKB_SRC_Y_OFF 

Y components of motion value.

BINKB_SRC_INTRA_DC 

DC values for intrablocks with DCT.

BINKB_SRC_INTER_DC 

DC values for interblocks with DCT.

BINKB_SRC_INTRA_Q 

quantizer values for intrablocks with DCT

BINKB_SRC_INTER_Q 

quantizer values for interblocks with DCT

BINKB_SRC_INTER_COEFS 

number of coefficients for residue blocks

BINKB_NB_SRC 

Definition at line 44 of file libavcodec/bink.c.

enum Sources

IDs for different data types used in Bink video codec.

Enumerator
BINK_SRC_BLOCK_TYPES 

8x8 block types

BINK_SRC_SUB_BLOCK_TYPES 

16x16 block types (a subset of 8x8 block types)

BINK_SRC_COLORS 

pixel values used for different block types

BINK_SRC_PATTERN 

8-bit values for 2-colour pattern fill

BINK_SRC_X_OFF 

X components of motion value.

BINK_SRC_Y_OFF 

Y components of motion value.

BINK_SRC_INTRA_DC 

DC values for intrablocks with DCT.

BINK_SRC_INTER_DC 

DC values for interblocks with DCT.

BINK_SRC_RUN 

run lengths for special fill block

BINK_NB_SRC 

Definition at line 73 of file libavcodec/bink.c.

Function Documentation

static int bink_decode_plane ( BinkContext c,
AVFrame frame,
GetBitContext gb,
int  plane_idx,
int  is_chroma 
)
static

Definition at line 951 of file libavcodec/bink.c.

Referenced by decode_frame().

static av_cold void binkb_calc_quant ( void  )
static

Caclulate quantization tables for version b.

Definition at line 1239 of file libavcodec/bink.c.

Referenced by decode_init().

static int binkb_decode_plane ( BinkContext c,
AVFrame frame,
GetBitContext gb,
int  plane_idx,
int  is_key,
int  is_chroma 
)
static

Definition at line 805 of file libavcodec/bink.c.

Referenced by decode_frame().

static int binkb_get_value ( BinkContext c,
int  bundle_num 
)
inlinestatic

Definition at line 579 of file libavcodec/bink.c.

Referenced by binkb_decode_plane().

static void binkb_init_bundle ( BinkContext c,
int  bundle_num 
)
static

Definition at line 531 of file libavcodec/bink.c.

Referenced by binkb_init_bundles().

static void binkb_init_bundles ( BinkContext c)
static

Definition at line 538 of file libavcodec/bink.c.

Referenced by binkb_decode_plane().

static int binkb_read_bundle ( BinkContext c,
GetBitContext gb,
int  bundle_num 
)
static

Definition at line 545 of file libavcodec/bink.c.

Referenced by binkb_decode_plane().

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 1324 of file libavcodec/bink.c.

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

Definition at line 1180 of file libavcodec/bink.c.

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 1268 of file libavcodec/bink.c.

static av_cold void free_bundles ( BinkContext c)
static

Free memory used by bundles.

Parameters
cdecoder context

Definition at line 200 of file libavcodec/bink.c.

Referenced by decode_end(), and decode_init().

static int get_value ( BinkContext c,
int  bundle 
)
inlinestatic

Retrieve next value from bundle.

Parameters
cdecoder context
bundlebundle number

Definition at line 518 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static av_cold int init_bundles ( BinkContext c)
static

Allocate memory for bundles.

Parameters
cdecoder context

Definition at line 176 of file libavcodec/bink.c.

Referenced by decode_init().

static void init_lengths ( BinkContext c,
int  width,
int  bw 
)
static

Initialize length length in all bundles.

Parameters
cdecoder context
widthplane width
bwplane width in 8x8 blocks

Definition at line 151 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static void merge ( GetBitContext gb,
uint8_t dst,
uint8_t src,
int  size 
)
static

Merge two consequent lists of equal size depending on bits read.

Parameters
gbcontext for reading bits
dstbuffer where merged list will be written to
srcpointer to the head of the first list (the second lists starts at src+size)
sizeinput lists size

Definition at line 215 of file libavcodec/bink.c.

Referenced by config_input_main(), draw_frame(), filter_frame(), read_tree(), realtext_read_header(), request_frame(), and uninit().

static void put_pixels8x8_overlapped ( uint8_t dst,
uint8_t src,
int  stride 
)
inlinestatic

Copy 8x8 block from source to destination, where src and dst may be overlapped.

Definition at line 795 of file libavcodec/bink.c.

Referenced by binkb_decode_plane().

static int read_block_types ( AVCodecContext avctx,
GetBitContext gb,
Bundle b 
)
static

Definition at line 370 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static void read_bundle ( GetBitContext gb,
BinkContext c,
int  bundle_num 
)
static

Prepare bundle for decoding data.

Parameters
gbcontext for reading bits
cdecoder context
bundle_numnumber of the bundle to initialize

Definition at line 283 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static int read_colors ( GetBitContext gb,
Bundle b,
BinkContext c 
)
static

Definition at line 425 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static int read_dcs ( AVCodecContext avctx,
GetBitContext gb,
Bundle b,
int  start_bits,
int  has_sign 
)
static

Definition at line 466 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static int read_dct_coeffs ( GetBitContext gb,
int32_t  block[64],
const uint8_t scan,
const int32_t  quant_matrices[16][64],
int  q 
)
static

Read 8x8 block of DCT coefficients.

Parameters
gbcontext for reading bits
blockplace for storing coefficients
scanscan order table
quant_matricesquantization matrices
Returns
0 for success, negative value in other cases

Definition at line 602 of file libavcodec/bink.c.

Referenced by bink_decode_plane(), and binkb_decode_plane().

static int read_motion_values ( AVCodecContext avctx,
GetBitContext gb,
Bundle b 
)
static

Definition at line 336 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static int read_patterns ( AVCodecContext avctx,
GetBitContext gb,
Bundle b 
)
static

Definition at line 405 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static int read_residue ( GetBitContext gb,
int16_t  block[64],
int  masks_count 
)
static

Read 8x8 block with residue after motion compensation.

Parameters
gbcontext for reading bits
blockplace to store read data
masks_countnumber of masks to decode
Returns
0 on success, negative value in other cases

Definition at line 710 of file libavcodec/bink.c.

Referenced by bink_decode_plane(), and binkb_decode_plane().

static int read_runs ( AVCodecContext avctx,
GetBitContext gb,
Bundle b 
)
static

Definition at line 314 of file libavcodec/bink.c.

Referenced by bink_decode_plane().

static void read_tree ( GetBitContext gb,
Tree tree 
)
static

Read information about Huffman tree used to decode data.

Parameters
gbcontext for reading bits
treepointer for storing tree data

Definition at line 242 of file libavcodec/bink.c.

Referenced by read_bundle().

Variable Documentation

const uint8_t bink_rlelens[4] = { 4, 8, 12, 32 }
static

Definition at line 368 of file libavcodec/bink.c.

Referenced by read_block_types().

VLC bink_trees[16]
static

Definition at line 39 of file libavcodec/bink.c.

const int binkb_bundle_signed[BINKB_NB_SRC]
static
Initial value:
= {
0, 0, 0, 1, 1, 0, 1, 0, 0, 0
}

Definition at line 63 of file libavcodec/bink.c.

Referenced by binkb_get_value(), and binkb_read_bundle().

const int binkb_bundle_sizes[BINKB_NB_SRC]
static
Initial value:
= {
4, 8, 8, 5, 5, 11, 11, 4, 4, 7
}

Definition at line 59 of file libavcodec/bink.c.

Referenced by binkb_get_value(), and binkb_read_bundle().

int32_t binkb_inter_quant[16][64]
static

Definition at line 68 of file libavcodec/bink.c.

Referenced by binkb_calc_quant(), and binkb_decode_plane().

int32_t binkb_intra_quant[16][64]
static

Definition at line 67 of file libavcodec/bink.c.

Referenced by binkb_calc_quant(), and binkb_decode_plane().

AVCodec ff_bink_decoder
Initial value:
= {
.name = "binkvideo",
.priv_data_size = sizeof(BinkContext),
.long_name = NULL_IF_CONFIG_SMALL("Bink video"),
.capabilities = CODEC_CAP_DR1,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static av_cold int decode_init(AVCodecContext *avctx)
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *pkt)
struct BinkContext BinkContext
static av_cold int decode_end(AVCodecContext *avctx)
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868

Definition at line 1334 of file libavcodec/bink.c.